示例#1
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);
        }
    }
}
示例#2
0
/**
 * Return the forum visibility dropdown
 *
 * @since bbPress (r3563)
 *
 * @param int $forum_id The forum id to use
 * @uses bbp_is_topic_edit() To check if it's the topic edit page
 * @uses bbp_get_forum_visibility() To get the forum visibility
 * @uses apply_filters()
 * @return string HTML select list for selecting forum visibility
 */
function bbp_get_form_forum_visibility_dropdown($args = '')
{
    // Backpat for handling passing of a forum ID
    if (is_int($args)) {
        $forum_id = (int) $args;
        $args = array();
    } else {
        $forum_id = 0;
    }
    // Parse arguments against default values
    $r = bbp_parse_args($args, array('select_id' => 'bbp_forum_visibility', 'tab' => bbp_get_tab_index(), 'forum_id' => $forum_id, 'selected' => false), 'forum_type_select');
    // No specific selected value passed
    if (empty($r['selected'])) {
        // Post value is passed
        if (bbp_is_post_request() && isset($_POST[$r['select_id']])) {
            $r['selected'] = $_POST[$r['select_id']];
            // No Post value was passed
        } else {
            // Edit topic
            if (bbp_is_forum_edit()) {
                $r['forum_id'] = bbp_get_forum_id($r['forum_id']);
                $r['selected'] = bbp_get_forum_visibility($r['forum_id']);
                // New topic
            } else {
                $r['selected'] = bbp_get_public_status_id();
            }
        }
    }
    // Used variables
    $tab = !empty($r['tab']) ? ' tabindex="' . (int) $r['tab'] . '"' : '';
    // Start an output buffer, we'll finish it after the select loop
    ob_start();
    ?>

		<select name="<?php 
    echo esc_attr($r['select_id']);
    ?>
" id="<?php 
    echo esc_attr($r['select_id']);
    ?>
_select"<?php 
    echo $tab;
    ?>
>

			<?php 
    foreach (bbp_get_forum_visibilities() as $key => $label) {
        ?>

				<option value="<?php 
        echo esc_attr($key);
        ?>
"<?php 
        selected($key, $r['selected']);
        ?>
><?php 
        echo esc_html($label);
        ?>
</option>

			<?php 
    }
    ?>

		</select>

		<?php 
    // Return the results
    return apply_filters('bbp_get_form_forum_type_dropdown', ob_get_clean(), $r);
}
示例#3
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);
    }
}