예제 #1
0
/**
 * Callback function on the `after_delete_post` hook for when a forum is deleted.
 *
 * @todo All forum topics need to become orphans at this point. Attempt to move topics into parent if avail.
 * @todo Reset counts for parent forums.
 * @todo `wp_die()` if this is the default forum.
 *
 * @since  1.0.0
 * @access public
 * @param  int     $post_id
 * @return void
 */
function mb_after_delete_forum($post_id)
{
    global $wpdb;
    $mb = message_board();
    if (is_object($mb->deleted_post) && $mb->deleted_post->ID === $post_id) {
        $forum_id = mb_get_forum_id($post_id);
        $user_id = mb_get_user_id($post->deleted_post->post_author);
        $parent_forum_id = $mb->deleted_post->post_parent;
        /* Get the current forum's subforum IDs. */
        $subforum_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_parent = %s ORDER BY menu_order DESC", mb_get_forum_post_type(), absint($forum_id)));
        if (!empty($subforum_ids)) {
            $moved_forums = false;
            while (0 < $parent_forum_id) {
                if (mb_forum_allows_subforums($parent_forum_id)) {
                    /* Change all of the subforums' parents to the new forum ID. */
                    $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_parent = %d WHERE ID IN (" . implode(',', $subforum_ids) . ")", absint($parent_forum_id)));
                    /* Reset data based on new forum. */
                    mb_reset_forum_data($parent_forum_id);
                    $parent_forum_id = 0;
                    $moved_forums = true;
                    /* Break out of the while loop at this point. */
                    break;
                }
                $post = get_post($parent_forum_id);
                $parent_forum_id = $post->post_parent;
            }
            /* If subforums didn't get moved to a new forum, make them a top-level forum. */
            if (false === $moved_forums) {
                $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_parent = %d WHERE ID IN (" . implode(',', $subforum_ids) . ")", 0));
            }
        }
        $parent_forum_id = $mb->deleted_post->post_parent;
        /* Get the current forum's topic IDs. */
        $topic_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_parent = %s ORDER BY menu_order DESC", mb_get_topic_post_type(), absint($forum_id)));
        if (!empty($topic_ids)) {
            $moved_topics = false;
            while (0 < $parent_forum_id) {
                if (mb_forum_allows_topics($parent_forum_id)) {
                    /* Change all of the topics' parents to the new forum ID. */
                    $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_parent = %d WHERE ID IN (" . implode(',', $topic_ids) . ")", absint($parent_forum_id)));
                    /* Reset data based on new forum. */
                    mb_reset_forum_data($parent_forum_id);
                    $parent_forum_id = 0;
                    $moved_topics = true;
                    /* Break out of the while loop at this point. */
                    break;
                }
                $post = get_post($parent_forum_id);
                $parent_forum_id = $post->post_parent;
            }
            /* If topics didn't get moved to a new forum, set their status to "orphan". */
            if (false === $moved_topics) {
                $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_status = %s WHERE ID IN (" . implode(',', $topic_ids) . ")", mb_get_orphan_post_status()));
            }
        }
        /* Reset user forum count. */
        mb_set_user_forum_count($user_id);
    }
}
예제 #2
0
/**
 * Returns a user's forum count.
 *
 * @since  1.0.0
 * @access public
 * @param  int     $user_id
 * @return int
 */
function mb_get_user_forum_count($user_id = 0)
{
    $user_id = mb_get_user_id($user_id);
    $count = get_user_meta($user_id, mb_get_user_forum_count_meta_key(), true);
    if ('' === $count) {
        $count = mb_set_user_forum_count($user_id);
    }
    $count = !empty($count) ? absint($count) : 0;
    return apply_filters('mb_get_user_forum_count', $count, $user_id);
}
예제 #3
0
/**
 * Function for inserting forum data when it's first published.
 *
 * @since  1.0.0
 * @access public
 * @param  object  $post
 * @return void
 */
function mb_insert_forum_data($post)
{
    /* Hook for before inserting forum data. */
    do_action('mb_before_insert_forum_data', $post);
    /* Get the forum ID. */
    $forum_id = mb_get_forum_id($post->ID);
    /* Get the User ID. */
    $user_id = mb_get_user_id($post->post_author);
    /* Update parent's subforum count. */
    if (0 < $post->post_parent) {
        $count = mb_get_forum_subforum_count($post->post_parent);
        mb_set_forum_subforum_count($post->post_parent, absint($count) + 1);
    }
    /* Update user meta. */
    mb_set_user_forum_count($user_id);
    /* Add forum meta. */
    mb_reset_forum_level($forum_id);
    /* Notify subscribers that there's a new forum. */
    mb_notify_subscribers($post);
    /* Hook for after inserting forum data. */
    do_action('mb_after_insert_forum_data', $post);
}