function pmpro_bbp_is_forum($forum_id = NULL) { global $post; if (bbp_is_forum($post->ID)) { if (!empty($forum_id) && $post->ID == $forum_id) { return true; } elseif (empty($forum_id)) { return true; } else { return false; } } elseif (bbp_is_topic($post->ID)) { if (!empty($forum_id) && $post->post_parent == $forum_id) { return true; } elseif (empty($forum_id)) { return true; } else { return false; } } elseif (bbp_is_reply($post->ID)) { if (!empty($forum_id) && in_array($forum_id, $post->ancestors)) { return true; } elseif (empty($forum_id)) { return true; } else { return false; } } else { return false; } }
/** * Pass the forum attributes for processing * * @since bbPress (r2746) * * @param int $forum_id Forum id * @uses current_user_can() To check if the current user is capable of * editing the forum * @uses bbp_get_forum() To get the forum * @uses bbp_is_forum_closed() To check if the forum is closed * @uses bbp_is_forum_category() To check if the forum is a category * @uses bbp_is_forum_private() To check if the forum is private * @uses bbp_close_forum() To close the forum * @uses bbp_open_forum() To open the forum * @uses bbp_categorize_forum() To make the forum a category * @uses bbp_normalize_forum() To make the forum normal (not category) * @uses bbp_privatize_forum() To mark the forum as private * @uses bbp_publicize_forum() To mark the forum as public * @uses do_action() Calls 'bbp_forum_attributes_metabox_save' with the * forum id * @return int Forum id */ public function attributes_metabox_save($forum_id) { if ($this->bail()) { return $forum_id; } // Bail if doing an autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $forum_id; } // Bail if not a post request if ('POST' != strtoupper($_SERVER['REQUEST_METHOD'])) { return $forum_id; } // Nonce check if (empty($_POST['bbp_forum_metabox']) || !wp_verify_nonce($_POST['bbp_forum_metabox'], 'bbp_forum_metabox_save')) { return $forum_id; } // Only save for forum post-types if (!bbp_is_forum($forum_id)) { return $forum_id; } // Bail if current user cannot edit this forum if (!current_user_can('edit_forum', $forum_id)) { return $forum_id; } // Parent ID $parent_id = !empty($_POST['parent_id']) && is_numeric($_POST['parent_id']) ? (int) $_POST['parent_id'] : 0; // Update the forum meta bidness bbp_update_forum(array('forum_id' => $forum_id, 'post_parent' => (int) $parent_id)); do_action('bbp_forum_attributes_metabox_save', $forum_id); return $forum_id; }
/<?php echo bp_forums_root_slug(); ?> /" title="<?php _e('Forums', 'framemarket'); ?> "><?php _e('Forums', 'framemarket'); ?> </a> </li> <?php } elseif (function_exists('bbpress')) { ?> <li<?php if (bbp_is_forum($post->ID) || bbp_is_topic($post->ID)) { ?> class="selected"<?php } ?> > <a href="<?php bbp_forums_url(); ?> "><?php _e('Forums', 'framemarket'); ?> </a> </li> <?php }
/** * Check the forum visibility ID * * @since 2.6.0 bbPress (r5499) * * @param int $forum_id Optional. Forum id * @param bool $status_name The post status name to check * @param bool $check_ancestors Check the forum ancestors * @param string $operator The logical operation to perform. * 'OR' means only one forum from the tree needs to match; * 'AND' means all forums must match. The default is 'AND'. * @uses bbp_get_forum_id() To get the forum ID * @uses bbp_get_forum_visibility() To get the forum visibility * @uses bbp_get_forum_ancestors() To get the forum ancestors * @uses bbp_is_forum() To check the post type * @return bool True if match, false if not */ function bbp_is_forum_visibility($forum_id, $status_name, $check_ancestors = true, $operator = 'AND') { // Setup some default variables $count = 0; $retval = false; $operator = strtoupper($operator); $forum_id = bbp_get_forum_id($forum_id); $visibility = bbp_get_forum_visibility($forum_id); // Quickly compare visibility of first forum ID if ($status_name === $visibility) { $retval = true; $count++; } // Let's check the forum's ancestors too if (!empty($check_ancestors)) { // Adjust the ancestor check based on the count switch ($operator) { // Adjust the ancestor check based on the count default: case 'AND': $check_ancestors = $count > 0; break; case 'OR': $check_ancestors = $count < 1; break; } // Ancestor check passed, so continue looping through them if (!empty($check_ancestors)) { // Loop through the forum ancestors foreach ((array) bbp_get_forum_ancestors($forum_id) as $ancestor) { // Check if the forum is not a category if (bbp_is_forum($ancestor)) { // Check the forum visibility $retval = bbp_is_forum_visibility($ancestor, $status_name, false); if (true === $retval) { $count++; } } // Break when it reach the max count if ($operator === 'OR' && $count >= 1) { break; } } } } // Filter and return return (bool) apply_filters('bbp_is_forum_visibility', $retval, $count, $forum_id, $status_name, $check_ancestors, $operator); }
public function InBBPressPage() { if (!$this->IsBBPressInstalled()) { return false; } if (!isset($this->_inBBPress)) { $this->_inBBPress = false; if (function_exists('bbp_is_forum')) { // $this->_inBBPress = $this->_inBBPress || ('' !== bb_get_location()); $this->_inBBPress = $this->_inBBPress || bbp_is_forum(get_the_ID()); $this->_inBBPress = $this->_inBBPress || bbp_is_single_user(); } if (RWLogger::IsOn()) { RWLogger::Log('InBBPressPage', $this->_inBuddyPress ? 'TRUE' : 'FALSE'); } } return $this->_inBBPress; }
public static function meta_params($forum_id, $admin = false) { if (!bbp_is_forum($forum_id)) { return array(); } $meta_params = get_post_meta($forum_id, 'bbpmeta_params', false); if (empty($meta_params)) { return array(); } uasort($meta_params, array(__CLASS__, 'meta_order')); return $meta_params; return self::bbpmeta_order($forum_id, $meta_params); }
public static function template_no_access($template) { global $wp_query, $post; $check_perm = false; if (bbp_is_single_user_edit() || bbp_is_single_user()) { } elseif (bbp_is_forum_archive()) { } elseif (bbp_is_forum_edit()) { $forum_id = bbp_get_forum_id(); if (bbp_is_forum($forum_id) && !bbp_user_can_view_forum(array('forum_id' => $forum_id)) && !bbp_is_forum_private($forum_id, false)) { $check_perm = true; } } elseif (bbp_is_single_forum()) { $forum_id = bbp_get_forum_id(); if (bbp_is_forum($forum_id) && !bbp_user_can_view_forum(array('forum_id' => $forum_id)) && !bbp_is_forum_private($forum_id, false)) { $check_perm = true; } } elseif (bbp_is_topic_archive()) { } elseif (bbp_is_topic_edit() || bbp_is_single_topic()) { $check_perm = true; } elseif (is_post_type_archive(bbp_get_reply_post_type())) { } elseif (bbp_is_reply_edit() || bbp_is_single_reply()) { $check_perm = true; } elseif (bbp_is_single_view()) { } elseif (bbp_is_search()) { } elseif (bbp_is_topic_tag_edit() || bbp_is_topic_tag()) { } if ($check_perm && empty($post->post_content)) { $user_id = get_current_user_id(); $forum_id = bbp_get_forum_id(); if (!self::view_forum(false, $forum_id, $user_id)) { ob_start(); bbp_get_template_part('feedback', 'no-access'); $content = ob_get_clean(); $post->post_content = "\n{$content}\n"; $wp_query->post = $post; $wp_query->posts = array($post); } } return $template; }
/** * Called after untrashing a forum * * @since bbPress (r3668) * @uses bbp_get_forum_id() To get the forum id * @uses bbp_is_forum() To check if the passed id is a forum * @uses do_action() Calls 'bbp_untrashed_forum' with the forum id */ function bbp_untrashed_forum($forum_id = 0) { $forum_id = bbp_get_forum_id($forum_id); if (empty($forum_id) || !bbp_is_forum($forum_id)) { return false; } do_action('bbp_untrashed_forum', $forum_id); }
/** * Display the contents of a specific forum ID in an output buffer * and return to ensure that post/page contents are displayed first. * * @since bbPress (r3031) * * @param array $attr * @param string $content * @uses get_template_part() * @uses bbp_single_forum_description() * @return string */ public function display_forum($attr, $content = '') { // Sanity check required info if (!empty($content) || (empty($attr['id']) || !is_numeric($attr['id']))) { return $content; } // Set passed attribute to $forum_id for clarity $forum_id = bbpress()->current_forum_id = $attr['id']; // Bail if ID passed is not a forum if (!bbp_is_forum($forum_id)) { return $content; } // Start output buffer $this->start('bbp_single_forum'); // Check forum caps if (bbp_user_can_view_forum(array('forum_id' => $forum_id))) { bbp_get_template_part('content', 'single-forum'); // Forum is private and user does not have caps } elseif (bbp_is_forum_private($forum_id, false)) { bbp_get_template_part('feedback', 'no-access'); } // Return contents of output buffer return $this->end(); }
public static function user_has_cap($allcaps, $caps, $args, $user) { if (!in_array('upload_files', $caps)) { return $allcaps; } $can = isset($allcaps['upload_files']) ? $allcaps['upload_files'] : false; // async-upload.php, admin-ajax.php 를 통해서 업로드할 때 권한 체크가 어려움 $ajax_attachment_actions = apply_filters('bbpkr_ajax_attachment_actions', array('upload-attachment', 'query-attachments')); if ((isset($_REQUEST['post_id']) || !empty(self::$forum_id)) && empty($allcaps['upload_files']) && (defined('DOING_AJAX') && true === DOING_AJAX) && (isset($_REQUEST['action']) && in_array($_REQUEST['action'], $ajax_attachment_actions))) { if (isset($_REQUEST['post_id'])) { $the_id = (int) $_REQUEST['post_id']; if (bbp_is_forum($the_id)) { self::$forum_id = $the_id; } elseif (bbp_is_topic($the_id)) { self::$forum_id = (int) bbp_get_topic_forum_id($the_id); } elseif (bbp_is_reply($the_id)) { self::$forum_id = (int) bbp_get_reply_forum_id($the_id); } } if (!self::$forum_id) { return $allcaps; } $forum_id = self::$forum_id; // unset post_id to avoid edit_post check( DO NOT UNSET $_POST['post_id'] ) $_REQUEST['post_id'] = null; $allcaps['upload_files'] = self::can_upload($can, $forum_id); return $allcaps; } $allcaps['upload_files'] = self::can_upload($can); return $allcaps; }
/** * Walk up the ancestor tree from the current reply, and update all the counts * * @since 2.0.0 bbPress (r2884) * * @param int $reply_id Optional. Reply id * @param string $last_active_time Optional. Last active time * @param int $forum_id Optional. Forum id * @param int $topic_id Optional. Topic id * @param bool $refresh If set to true, unsets all the previous parameters. * Defaults to true * @uses bbp_get_reply_id() To get the reply id * @uses bbp_get_reply_topic_id() To get the reply topic id * @uses bbp_get_reply_forum_id() To get the reply forum id * @uses get_post_ancestors() To get the ancestors of the reply * @uses bbp_is_reply() To check if the ancestor is a reply * @uses bbp_is_topic() To check if the ancestor is a topic * @uses bbp_update_topic_last_reply_id() To update the topic last reply id * @uses bbp_update_topic_last_active_id() To update the topic last active id * @uses bbp_get_topic_last_active_id() To get the topic last active id * @uses get_post_field() To get the post date of the last active id * @uses bbp_update_topic_last_active_time() To update the last active topic meta * @uses bbp_update_topic_voice_count() To update the topic voice count * @uses bbp_update_topic_reply_count() To update the topic reply count * @uses bbp_update_topic_reply_count_hidden() To update the topic hidden reply * count * @uses bbp_is_forum() To check if the ancestor is a forum * @uses bbp_update_forum_last_topic_id() To update the last topic id forum meta * @uses bbp_update_forum_last_reply_id() To update the last reply id forum meta * @uses bbp_update_forum_last_active_id() To update the forum last active id * @uses bbp_get_forum_last_active_id() To get the forum last active id * @uses bbp_update_forum_last_active_time() To update the forum last active time * @uses bbp_update_forum_reply_count() To update the forum reply count */ function bbp_update_reply_walker($reply_id, $last_active_time = '', $forum_id = 0, $topic_id = 0, $refresh = true) { // Verify the reply ID $reply_id = bbp_get_reply_id($reply_id); // Reply was passed if (!empty($reply_id)) { // Get the topic ID if none was passed if (empty($topic_id)) { $topic_id = bbp_get_reply_topic_id($reply_id); // Make every effort to get topic id // https://bbpress.trac.wordpress.org/ticket/2529 if (empty($topic_id) && current_filter() === 'bbp_deleted_reply') { $topic_id = get_post_field('post_parent', $reply_id); } } // Get the forum ID if none was passed if (empty($forum_id)) { $forum_id = bbp_get_reply_forum_id($reply_id); } } // Set the active_id based on topic_id/reply_id $active_id = empty($reply_id) ? $topic_id : $reply_id; // Setup ancestors array to walk up $ancestors = array_values(array_unique(array_merge(array($topic_id, $forum_id), (array) get_post_ancestors($topic_id)))); // If we want a full refresh, unset any of the possibly passed variables if (true === $refresh) { $forum_id = $topic_id = $reply_id = $active_id = $last_active_time = 0; } // Walk up ancestors if (!empty($ancestors)) { foreach ($ancestors as $ancestor) { // Reply meta relating to most recent reply if (bbp_is_reply($ancestor)) { // @todo - hierarchical replies // Topic meta relating to most recent reply } elseif (bbp_is_topic($ancestor)) { // Last reply and active ID's bbp_update_topic_last_reply_id($ancestor, $reply_id); bbp_update_topic_last_active_id($ancestor, $active_id); // Get the last active time if none was passed $topic_last_active_time = $last_active_time; if (empty($last_active_time)) { $topic_last_active_time = get_post_field('post_date', bbp_get_topic_last_active_id($ancestor)); } // Update the topic last active time regardless of reply status. // See https://bbpress.trac.wordpress.org/ticket/2838 bbp_update_topic_last_active_time($ancestor, $topic_last_active_time); // Counts bbp_update_topic_voice_count($ancestor); // Only update reply count if we're deleting a reply, or in the dashboard. if (in_array(current_filter(), array('bbp_deleted_reply', 'save_post'), true)) { bbp_update_topic_reply_count($ancestor); bbp_update_topic_reply_count_hidden($ancestor); } // Forum meta relating to most recent topic } elseif (bbp_is_forum($ancestor)) { // Last topic and reply ID's bbp_update_forum_last_topic_id($ancestor, $topic_id); bbp_update_forum_last_reply_id($ancestor, $reply_id); // Last Active bbp_update_forum_last_active_id($ancestor, $active_id); // Get the last active time if none was passed $forum_last_active_time = $last_active_time; if (empty($last_active_time)) { $forum_last_active_time = get_post_field('post_date', bbp_get_forum_last_active_id($ancestor)); } // Only update if reply is published if (bbp_is_reply_published($reply_id)) { bbp_update_forum_last_active_time($ancestor, $forum_last_active_time); } // Counts // Only update reply count if we're deleting a reply, or in the dashboard. if (in_array(current_filter(), array('bbp_deleted_reply', 'save_post'), true)) { bbp_update_forum_reply_count($ancestor); } } } } }
/** * Get forums of a moderator * * @since 2.6.0 bbPress (r5834) * * @param int $user_id User id. * @uses get_userdata() To get the user object * @uses bbp_get_forum_mod_tax_id() To get the forum moderator taxonomy * @uses bbp_get_user_taxonomy_term_id() To get the user taxonomy term id * @uses get_term_by() To get the term id * @uses get_objects_in_term() Get the forums the user moderates * @uses is_wp_error() To check for errors * @uses bbp_is_forum() To make sure the objects are forums * * @return boolean|array Return false on error or empty, or array of forum ids */ function bbp_get_moderator_forum_ids($user_id = 0) { // Bail if no user ID. $user_id = bbp_get_user_id($user_id); if (empty($user_id)) { return false; } // Bail if user does not exist. $user = get_userdata($user_id); if (empty($user)) { return false; } // Convert user id to term id. $taxonomy = bbp_get_forum_mod_tax_id(); $term_id = bbp_get_user_taxonomy_term_id($user_id, $taxonomy); // Get moderator forums. $forums = get_objects_in_term($term_id, $taxonomy); // Forums found. if (empty($forums) || is_wp_error($forums)) { return false; } // Make sure the ids returned are forums. $forum_ids = array(); foreach ($forums as $forum_id) { if (bbp_is_forum($forum_id)) { $forum_ids[] = $forum_id; } } // Remove empties $retval = wp_parse_id_list(array_filter($forum_ids)); // Filter & return return apply_filters('bbp_get_moderator_forum_ids', $retval, $user_id); }
/** * Display the topic form in an output buffer and return to ensure * post/page contents are displayed first. * * Supports 'forum_id' attribute to display the topic form for a particular * forum. This currently has styling issues from not being wrapped in * <div id="bbpress-forums"></div> which will need to be sorted out later. * * @since bbPress (r3031) * * @param array $attr * @param string $content * @uses get_template_part() * @return string */ public function display_topic_form($attr = array(), $content = '') { // Sanity check supplied info if (!empty($content) || !empty($attr['forum_id']) && (!is_numeric($attr['forum_id']) || !bbp_is_forum($attr['forum_id']))) { return $content; } // Unset globals $this->unset_globals(); // If forum id is set, use the 'bbp_single_forum' query name if (!empty($attr['forum_id'])) { // Set the global current_forum_id for future requests bbpress()->current_forum_id = $forum_id = bbp_get_forum_id($attr['forum_id']); // Start output buffer $this->start('bbp_single_forum'); // No forum id was passed } else { // Set the $forum_id variable to satisfy checks below $forum_id = 0; // Start output buffer $this->start('bbp_topic_form'); } // If the forum id is set, check forum caps else display normal topic form if (empty($forum_id) || bbp_user_can_view_forum(array('forum_id' => $forum_id))) { bbp_get_template_part('form', 'topic'); // Forum is private and user does not have caps } elseif (bbp_is_forum_private($forum_id, false)) { bbp_get_template_part('feedback', 'no-access'); } // Return contents of output buffer return $this->end(); }
/** * @group canonical * @covers ::bbp_insert_forum */ public function test_bbp_insert_forum() { $c = $this->factory->forum->create(array('post_title' => 'Category 1', 'post_content' => 'Content of Category 1', 'forum_meta' => array('forum_type' => 'category', 'status' => 'open'))); $f = $this->factory->forum->create(array('post_title' => 'Forum 1', 'post_content' => 'Content of Forum 1', 'post_parent' => $c, 'forum_meta' => array('forum_id' => $c, 'forum_type' => 'forum', 'status' => 'open'))); $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 category. $category = bbp_get_forum($c); // Get the forum. $forum = bbp_get_forum($f); // Category post. $this->assertSame('Category 1', bbp_get_forum_title($c)); $this->assertSame('Content of Category 1', bbp_get_forum_content($c)); $this->assertSame('open', bbp_get_forum_status($c)); $this->assertSame('category', bbp_get_forum_type($c)); $this->assertTrue(bbp_is_forum($c)); $this->assertTrue(bbp_is_forum_category($c)); $this->assertTrue(bbp_is_forum_open($c)); $this->assertTrue(bbp_is_forum_public($c)); $this->assertFalse(bbp_is_forum_closed($c)); $this->assertFalse(bbp_is_forum_hidden($c)); $this->assertFalse(bbp_is_forum_private($c)); $this->assertSame(0, bbp_get_forum_parent_id($c)); $this->assertEquals('http://' . WP_TESTS_DOMAIN . '/?forum=' . $category->post_name, $category->guid); // 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($f)); $this->assertTrue(bbp_is_forum_open($f)); $this->assertTrue(bbp_is_forum_public($f)); $this->assertFalse(bbp_is_forum_closed($f)); $this->assertFalse(bbp_is_forum_hidden($f)); $this->assertFalse(bbp_is_forum_private($f)); $this->assertSame($c, bbp_get_forum_parent_id($f)); $this->assertEquals('http://' . WP_TESTS_DOMAIN . '/?forum=' . $category->post_name . '/' . $forum->post_name, $forum->guid); // Category meta. $this->assertSame(1, bbp_get_forum_subforum_count($c, true)); $this->assertSame(0, bbp_get_forum_topic_count($c, false, true)); $this->assertSame(1, bbp_get_forum_topic_count($c, true, true)); $this->assertSame(0, bbp_get_forum_topic_count_hidden($c, true)); $this->assertSame(0, bbp_get_forum_reply_count($c, false, true)); $this->assertSame(1, bbp_get_forum_reply_count($c, true, true)); $this->assertSame(0, bbp_get_forum_post_count($c, false, true)); $this->assertSame(2, bbp_get_forum_post_count($c, true, true)); $this->assertSame($t, bbp_get_forum_last_topic_id($c)); $this->assertSame($r, bbp_get_forum_last_reply_id($c)); $this->assertSame($r, bbp_get_forum_last_active_id($c)); $this->assertSame('4 days, 4 hours ago', bbp_get_forum_last_active_time($c)); // 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)); }
/** * Is the forum hidden? * * @since bbPress (r2997) * * @param int $forum_id Optional. Forum id * @param bool $check_ancestors Check if the ancestors are private (only if * they're a category) * @uses get_post_meta() To get the forum private 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_hidden($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 private, return true $retval = bbp_get_hidden_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_hidden($ancestor, false)) { $retval = true; } } } return (bool) apply_filters('bbp_is_forum_hidden', (bool) $retval, $forum_id, $check_ancestors); }
/** * Walk up the ancestor tree from the current reply, and update all the counts * * @since bbPress (r2884) * * @param int $reply_id Optional. Reply id * @param string $last_active_time Optional. Last active time * @param int $forum_id Optional. Forum id * @param int $topic_id Optional. Topic id * @param bool $refresh If set to true, unsets all the previous parameters. * Defaults to true * @uses bbp_get_reply_id() To get the reply id * @uses bbp_get_reply_topic_id() To get the reply topic id * @uses bbp_get_reply_forum_id() To get the reply forum id * @uses get_post_ancestors() To get the ancestors of the reply * @uses bbp_is_reply() To check if the ancestor is a reply * @uses bbp_is_topic() To check if the ancestor is a topic * @uses bbp_update_topic_last_reply_id() To update the topic last reply id * @uses bbp_update_topic_last_active_id() To update the topic last active id * @uses bbp_get_topic_last_active_id() To get the topic last active id * @uses get_post_field() To get the post date of the last active id * @uses bbp_update_topic_last_active_time() To update the last active topic meta * @uses bbp_update_topic_voice_count() To update the topic voice count * @uses bbp_update_topic_reply_count() To update the topic reply count * @uses bbp_update_topic_reply_count_hidden() To update the topic hidden reply * count * @uses bbp_is_forum() To check if the ancestor is a forum * @uses bbp_update_forum_last_topic_id() To update the last topic id forum meta * @uses bbp_update_forum_last_reply_id() To update the last reply id forum meta * @uses bbp_update_forum_last_active_id() To update the forum last active id * @uses bbp_get_forum_last_active_id() To get the forum last active id * @uses bbp_update_forum_last_active_time() To update the forum last active time * @uses bbp_update_forum_reply_count() To update the forum reply count */ function bbp_update_reply_walker($reply_id, $last_active_time = '', $forum_id = 0, $topic_id = 0, $refresh = true) { // Verify the reply ID $reply_id = bbp_get_reply_id($reply_id); // Reply was passed if (!empty($reply_id)) { // Get the topic ID if none was passed if (empty($topic_id)) { $topic_id = bbp_get_reply_topic_id($reply_id); } // Get the forum ID if none was passed if (empty($forum_id)) { $forum_id = bbp_get_reply_forum_id($reply_id); } } // Set the active_id based on topic_id/reply_id $active_id = empty($reply_id) ? $topic_id : $reply_id; // Setup ancestors array to walk up $ancestors = array_values(array_unique(array_merge(array($topic_id, $forum_id), (array) get_post_ancestors($topic_id)))); // If we want a full refresh, unset any of the possibly passed variables if (true === $refresh) { $forum_id = $topic_id = $reply_id = $active_id = $last_active_time = 0; } // Walk up ancestors if (!empty($ancestors)) { foreach ($ancestors as $ancestor) { // Reply meta relating to most recent reply if (bbp_is_reply($ancestor)) { // @todo - hierarchical replies // Topic meta relating to most recent reply } elseif (bbp_is_topic($ancestor)) { // Last reply and active ID's bbp_update_topic_last_reply_id($ancestor, $reply_id); bbp_update_topic_last_active_id($ancestor, $active_id); // Get the last active time if none was passed $topic_last_active_time = $last_active_time; if (empty($last_active_time)) { $topic_last_active_time = get_post_field('post_date', bbp_get_topic_last_active_id($ancestor)); } // Only update if reply is published if (bbp_is_reply_published($reply_id)) { bbp_update_topic_last_active_time($ancestor, $topic_last_active_time); } // Counts bbp_update_topic_voice_count($ancestor); bbp_update_topic_reply_count($ancestor); bbp_update_topic_reply_count_hidden($ancestor); // Forum meta relating to most recent topic } elseif (bbp_is_forum($ancestor)) { // Last topic and reply ID's bbp_update_forum_last_topic_id($ancestor, $topic_id); bbp_update_forum_last_reply_id($ancestor, $reply_id); // Last Active bbp_update_forum_last_active_id($ancestor, $active_id); // Get the last active time if none was passed $forum_last_active_time = $last_active_time; if (empty($last_active_time)) { $forum_last_active_time = get_post_field('post_date', bbp_get_forum_last_active_id($ancestor)); } // Only update if reply is published if (bbp_is_reply_published($reply_id)) { bbp_update_forum_last_active_time($ancestor, $forum_last_active_time); } // Counts bbp_update_forum_reply_count($ancestor); } } } }
/** * Handle the moving of a topic from one forum to another. This includes walking * up the old and new branches and updating the counts. * * @since 2.0.0 bbPress (r2907) * * @param int $topic_id The topic id. * @param int $old_forum_id Old forum id. * @param int $new_forum_id New forum id. * @uses bbp_get_topic_id() To get the topic id * @uses bbp_get_forum_id() To get the forum id * @uses bbp_clean_post_cache() To clean the old and new forum post caches * @uses bbp_update_topic_forum_id() To update the topic forum id * @uses wp_update_post() To update the topic post parent` * @uses bbp_get_stickies() To get the old forums sticky topics * @uses delete_post_meta() To delete the forum sticky meta * @uses update_post_meta() To update the old forum sticky meta * @uses bbp_stick_topic() To stick the topic in the new forum * @uses bbp_get_reply_post_type() To get the reply post type * @uses bbp_get_all_child_ids() To get all the child ids * @uses bbp_update_reply_forum_id() To update the reply forum id * @uses get_post_ancestors() To get the topic's ancestors * @uses bbp_get_public_child_ids() To get all the public child ids * @uses get_post_field() To get the topic's post status * @uses bbp_get_public_status_id() To get the public status id * @uses bbp_decrease_forum_topic_count() To bump the forum topic count by -1 * @uses bbp_bump_forum_reply_count() To bump the forum reply count * @uses bbp_increase_forum_topic_count() To bump the forum topic count by 1 * @uses bbp_decrease_forum_topic_count_hidden() To bump the forum topic hidden count by -1 * @uses bbp_increase_forum_topic_count_hidden() To bump the forum topic hidden count by 1 * @uses bbp_is_forum() To check if the ancestor is a forum * @uses bbp_update_forum() To update the forum */ function bbp_move_topic_handler($topic_id, $old_forum_id, $new_forum_id) { // Validate parameters $topic_id = bbp_get_topic_id($topic_id); $old_forum_id = bbp_get_forum_id($old_forum_id); $new_forum_id = bbp_get_forum_id($new_forum_id); // Clean old and new forum caches before proceeding, to ensure subsequent // calls to forum objects are using updated data. bbp_clean_post_cache($old_forum_id); bbp_clean_post_cache($new_forum_id); // Update topic forum's ID bbp_update_topic_forum_id($topic_id, $new_forum_id); // Update topic post parent with the new forum ID wp_update_post(array('ID' => $topic_id, 'post_parent' => $new_forum_id)); /** Stickies **************************************************************/ // Get forum stickies $old_stickies = bbp_get_stickies($old_forum_id); // Only proceed if stickies are found if (!empty($old_stickies)) { // Define local variables $updated_stickies = array(); // Loop through stickies of forum and add misses to the updated array foreach ((array) $old_stickies as $sticky_topic_id) { if ($topic_id !== $sticky_topic_id) { $updated_stickies[] = $sticky_topic_id; } } // If stickies are different, update or delete them if ($updated_stickies !== $old_stickies) { // No more stickies so delete the meta if (empty($updated_stickies)) { delete_post_meta($old_forum_id, '_bbp_sticky_topics'); // Still stickies so update the meta } else { update_post_meta($old_forum_id, '_bbp_sticky_topics', $updated_stickies); } // Topic was sticky, so restick in new forum bbp_stick_topic($topic_id); } } /** Topic Replies *********************************************************/ // Get the topics replies $replies = bbp_get_all_child_ids($topic_id, bbp_get_reply_post_type()); // Update the forum_id of all replies in the topic foreach ($replies as $reply_id) { bbp_update_reply_forum_id($reply_id, $new_forum_id); } /** Old forum_id **********************************************************/ // Get topic ancestors $old_forum_ancestors = array_values(array_unique(array_merge(array($old_forum_id), (array) get_post_ancestors($old_forum_id)))); // Get reply count. $public_reply_count = count(bbp_get_public_child_ids($topic_id, bbp_get_reply_post_type())); // Topic status. $topic_status = get_post_field('post_status', $topic_id); // Update old/new forum counts. if ($topic_status === bbp_get_public_status_id()) { // Update old forum counts. bbp_decrease_forum_topic_count($old_forum_id); bbp_bump_forum_reply_count($old_forum_id, -$public_reply_count); // Update new forum counts. bbp_increase_forum_topic_count($new_forum_id); bbp_bump_forum_reply_count($new_forum_id, $public_reply_count); } else { // Update old forum counts. bbp_decrease_forum_topic_count_hidden($old_forum_id); // Update new forum counts. bbp_increase_forum_topic_count_hidden($new_forum_id); } // Loop through ancestors and update them if (!empty($old_forum_ancestors)) { foreach ($old_forum_ancestors as $ancestor) { if (bbp_is_forum($ancestor)) { bbp_update_forum(array('forum_id' => $ancestor)); } } } /** New forum_id **********************************************************/ // Make sure we're not walking twice if (!in_array($new_forum_id, $old_forum_ancestors)) { // Get topic ancestors $new_forum_ancestors = array_values(array_unique(array_merge(array($new_forum_id), (array) get_post_ancestors($new_forum_id)))); // Make sure we're not walking twice $new_forum_ancestors = array_diff($new_forum_ancestors, $old_forum_ancestors); // Loop through ancestors and update them if (!empty($new_forum_ancestors)) { foreach ($new_forum_ancestors as $ancestor) { if (bbp_is_forum($ancestor)) { bbp_update_forum(array('forum_id' => $ancestor)); } } } } }
/** * Handle the moving of a topic from one forum to another. This includes walking * up the old and new branches and updating the counts. * * @param int $topic_id Topic id * @param int $old_forum_id Old forum id * @param int $new_forum_id New forum id * @uses bbp_get_topic_id() To get the topic id * @uses bbp_get_forum_id() To get the forum id * @uses bbp_get_stickies() To get the old forums sticky topics * @uses delete_post_meta() To delete the forum sticky meta * @uses update_post_meta() To update the old forum sticky meta * @uses bbp_stick_topic() To stick the topic in the new forum * @uses bbp_get_reply_post_type() To get the reply post type * @uses bbp_get_all_child_ids() To get the public child ids * @uses bbp_update_reply_forum_id() To update the reply forum id * @uses bbp_update_topic_forum_id() To update the topic forum id * @uses get_post_ancestors() To get the topic's ancestors * @uses bbp_is_forum() To check if the ancestor is a forum * @uses bbp_update_forum() To update the forum */ function bbp_move_topic_handler($topic_id, $old_forum_id, $new_forum_id) { // Validate parameters $topic_id = bbp_get_topic_id($topic_id); $old_forum_id = bbp_get_forum_id($old_forum_id); $new_forum_id = bbp_get_forum_id($new_forum_id); // Update topic forum's ID bbp_update_topic_forum_id($topic_id, $new_forum_id); /** Stickies **************************************************************/ // Get forum stickies $old_stickies = bbp_get_stickies($old_forum_id); // Only proceed if stickies are found if (!empty($old_stickies)) { // Define local variables $updated_stickies = array(); // Loop through stickies of forum and add misses to the updated array foreach ((array) $old_stickies as $sticky_topic_id) { if ($topic_id !== $sticky_topic_id) { $updated_stickies[] = $sticky_topic_id; } } // If stickies are different, update or delete them if ($updated_stickies !== $old_stickies) { // No more stickies so delete the meta if (empty($updated_stickies)) { delete_post_meta($old_forum_id, '_bbp_sticky_topics'); // Still stickies so update the meta } else { update_post_meta($old_forum_id, '_bbp_sticky_topics', $updated_stickies); } // Topic was sticky, so restick in new forum bbp_stick_topic($topic_id); } } /** Topic Replies *********************************************************/ // Get the topics replies $replies = bbp_get_all_child_ids($topic_id, bbp_get_reply_post_type()); // Update the forum_id of all replies in the topic foreach ($replies as $reply_id) { bbp_update_reply_forum_id($reply_id, $new_forum_id); } /** Old forum_id **********************************************************/ // Get topic ancestors $old_forum_ancestors = array_values(array_unique(array_merge(array($old_forum_id), (array) get_post_ancestors($old_forum_id)))); // Loop through ancestors and update them if (!empty($old_forum_ancestors)) { foreach ($old_forum_ancestors as $ancestor) { if (bbp_is_forum($ancestor)) { bbp_update_forum(array('forum_id' => $ancestor)); } } } /** New forum_id **********************************************************/ // Make sure we're not walking twice if (!in_array($new_forum_id, $old_forum_ancestors)) { // Get topic ancestors $new_forum_ancestors = array_values(array_unique(array_merge(array($new_forum_id), (array) get_post_ancestors($new_forum_id)))); // Make sure we're not walking twice $new_forum_ancestors = array_diff($new_forum_ancestors, $old_forum_ancestors); // Loop through ancestors and update them if (!empty($new_forum_ancestors)) { foreach ($new_forum_ancestors as $ancestor) { if (bbp_is_forum($ancestor)) { bbp_update_forum(array('forum_id' => $ancestor)); } } } } }
static function meta_params($forum_id = 0) { $forum_id = bbp_get_forum_id($forum_id); if (!bbp_is_forum($forum_id)) { return array(); } if (is_object($forum_id)) { $forum_id = $forum_id->ID; } $meta_params = get_post_meta($forum_id, 'bbpmeta_params', false); if (empty($meta_params)) { $forum_parent = (int) get_post_field('post_parent', $forum_id); if ($forum_parent) { while ($forum_parent) { if ($meta_params = get_post_meta($forum_parent, 'bbpmeta_params', false)) { break; } $forum_parent = (int) get_post_field('post_parent', $forum_parent); } } if (empty($meta_params)) { return array(); } } uasort($meta_params, array(__CLASS__, 'meta_order')); $meta_params = array_map(array(__CLASS__, 'fill_meta'), $meta_params); return $meta_params; }