Skip to:
Content

bbPress.org

Ticket #1723: 1723.diff

File 1723.diff, 7.9 KB (added by pareshradadiya, 6 years ago)

bulk actions for forums has been improved. Type, Status and Visibility added to bulk action

  • src/includes/admin/admin.php

     
    582582
    583583                                        break;
    584584                        }
     585                } elseif ( 'edit' === get_current_screen()->base ) {
     586                        switch( get_current_screen()->post_type ) {
     587                                case bbp_get_forum_post_type() :
     588
     589                                        //Forums admin
     590                                        if ( bbp_get_forum_post_type() === get_current_screen()->post_type ) {
     591                                                wp_enqueue_script( 'bbp-admin-forums-js', $this->js_url . 'forums-list.js', array( 'jquery' ), $version );
     592                                                wp_localize_script( 'bbp-admin-forums-js', 'ajaxurl', admin_url('admin-ajax.php') );
     593                                        }
     594                                        break;
     595                        }
    585596                }
    586597        }
    587598
  • src/includes/admin/forums.php

     
    7474                add_action( 'manage_' . $this->post_type . '_posts_custom_column',  array( $this, 'column_data'    ), 10, 2 );
    7575                add_filter( 'page_row_actions',                                     array( $this, 'row_actions'    ), 10, 2 );
    7676
     77                //Forum bulk edit
     78                add_action( 'bulk_edit_custom_box', array( $this, 'display_custom_quickedit_forum' ), 10, 2 );
     79                add_action( 'wp_ajax_bbp_save_bulk_edit', array( $this, 'save_bulk_edit' ) );
     80
    7781                // Check if there are any bbp_toggle_forum_* requests on admin_init, also have a message displayed
    7882                add_action( 'load-edit.php',  array( $this, 'toggle_forum'        ) );
    7983                add_action( 'admin_notices',  array( $this, 'toggle_forum_notice' ) );
     
    753757
    754758                return $messages;
    755759        }
     760
     761        /**
     762         * Adds Type, Visibility and Status fields to Quick Edit options
     763         * @param string $column_name Name of the column
     764         * @param string $post_type Current Post Type (i.e. forum)
     765         * @return void
     766         */
     767        public function display_custom_quickedit_forum( $column_name, $post_type ) {
     768
     769                if ( $this->bail() ) {
     770                        return;
     771                }
     772
     773                if( $column_name !== 'bbp_forum_topic_count' )
     774                        return;
     775
     776                ?>
     777
     778                <fieldset class="inline-edit-col-left inline-edit-<?php echo $post_type ?>">
     779                        <div class="inline-edit-col">
     780                                <label class="inline-edit-group">
     781                                        <span class="title"><?php esc_html_e( 'Type', 'bbpress' ); ?></span>
     782                                        <select name="bbp_forum_type" id="bbp_forum_type_select">
     783                                                <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
     784                                                <?php foreach ( bbp_get_forum_types() as $key => $label ) : ?>
     785
     786                                                        <option value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $label ); ?></option>
     787
     788                                                <?php endforeach; ?>
     789
     790                                        </select>
     791                                </label>
     792                        </div>
     793                </fieldset>
     794
     795                <fieldset class="inline-edit-col-left inline-edit-<?php echo $post_type ?>">
     796                        <div class="inline-edit-col">
     797                                <label class="inline-edit-group">
     798                                        <span class="title"><?php esc_html_e( 'Forum Status', 'bbpress' ); ?></span>
     799                                        <select name="bbp_forum_status" id="bbp_forum_status_select">
     800                                                <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
     801                                                <?php foreach ( bbp_get_forum_statuses() as $key => $label ) : ?>
     802
     803                                                        <option value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $label ); ?></option>
     804
     805                                                <?php endforeach; ?>
     806
     807                                        </select>
     808                                </label>
     809                        </div>
     810                </fieldset>
     811
     812                <fieldset class="inline-edit-col-left inline-edit-<?php echo $post_type ?>">
     813                        <div class="inline-edit-col">
     814                                <label class="inline-edit-group">
     815                                        <span class="title"><?php esc_html_e( 'Visibility', 'bbpress' ); ?></span>
     816                                        <select name="_bbp_forum_visibility" id="bbp_forum_visibility_select">
     817                                                <option value=""><?php _e( '&mdash; No Change &mdash;' ); ?></option>
     818                                                <?php foreach ( bbp_get_forum_visibilities() as $key => $label ) : ?>
     819
     820                                                        <option value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $label ); ?></option>
     821
     822                                                <?php endforeach; ?>
     823
     824                                        </select>
     825                                </label>
     826                        </div>
     827                </fieldset>
     828
     829        <?php
     830        }
     831
     832        /**
     833         * Process bulk edit actions via AJAX
     834         *
     835         * @return void
     836         */
     837        public function save_bulk_edit() {
     838
     839                $forum_ids = ( isset( $_POST['post_ids'] ) && ! empty( $_POST['post_ids'] ) ) ? $_POST['post_ids'] : array();
     840
     841                if ( ! empty( $forum_ids ) && is_array( $forum_ids ) ) {
     842
     843                        foreach ( $forum_ids as $forum_id ) {
     844
     845                                if( ! current_user_can( 'edit_post', $forum_id ) ) {
     846                                        continue;
     847                                }
     848
     849                                /** Forum Type ********************************************************/
     850
     851                                if ( ! empty( $_POST['bbp_forum_type'] ) && in_array( $_POST['bbp_forum_type'], array( 'forum', 'category' ) ) ) {
     852                                        if ( 'category' === $_POST['bbp_forum_type'] && ! bbp_is_forum_category( $forum_id ) ) {
     853                                                bbp_categorize_forum( $forum_id );
     854                                        } elseif ( 'forum' === $_POST['bbp_forum_type'] && ! bbp_is_forum_category( $forum_id ) ) {
     855                                                bbp_normalize_forum( $forum_id );
     856                                        } elseif ( 'forum' === $_POST['bbp_forum_type'] && bbp_is_forum_category( $forum_id ) ) {
     857                                                bbp_normalize_forum( $forum_id );
     858                                        }
     859                                }
     860
     861                                /** Forum Status ******************************************************/
     862
     863                                if ( ! empty( $_POST['bbp_forum_status'] ) && in_array( $_POST['bbp_forum_status'], array( 'open', 'closed' ) ) ) {
     864                                        if ( 'closed' === $_POST['bbp_forum_status'] && ! bbp_is_forum_closed( $forum_id, false ) ) {
     865                                                bbp_close_forum( $forum_id );
     866                                        } elseif ( 'open' === $_POST['bbp_forum_status'] && bbp_is_forum_open( $forum_id, false ) ) {
     867                                                bbp_open_forum( $forum_id );
     868                                        } elseif ( 'open' === $_POST['bbp_forum_status'] && bbp_is_forum_closed( $forum_id, false ) ) {
     869                                                bbp_open_forum( $forum_id );
     870                                        }
     871                                }
     872
     873                                /** Forum Visibility **************************************************/
     874                                $visibility = isset( $_POST['bbp_forum_visibility'] ) ? $_POST['bbp_forum_visibility'] : '';
     875                                if ( ! empty( $visibility ) ) {
     876                                        // What is the new forum visibility setting?
     877                                        switch ( $visibility ) {
     878
     879                                                // Hidden
     880                                                case bbp_get_hidden_status_id()  :
     881                                                        bbp_hide_forum( $forum_id );
     882                                                        break;
     883
     884                                                // Private
     885                                                case bbp_get_private_status_id() :
     886                                                        bbp_privatize_forum( $forum_id );
     887                                                        break;
     888
     889                                                // Publish (default)
     890                                                case bbp_get_public_status_id()  :
     891                                                default        :
     892                                                        bbp_publicize_forum( $forum_id );
     893                                                        break;
     894                                        }
     895                                }
     896                        }
     897                }
     898
     899                die();
     900        }
     901
    756902}
    757903endif; // class_exists check
    758904
  • src/includes/admin/js/forums-list.js

     
     1jQuery( document ).ready(function( $ ) {
     2
     3    // Bulk edit save
     4    $( 'body' ).on( 'click', '#bulk_edit', function() {
     5
     6        // define the bulk edit row
     7        var $bulk_row = $( '#bulk-edit' );
     8
     9        // get the selected post ids that are being edited
     10        var $post_ids = new Array();
     11        $bulk_row.find( '#bulk-titles' ).children().each( function() {
     12            $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
     13        });
     14
     15        // get the type, status and visibility values to save for all the forums ID's
     16        var $bbp_forum_type         = $('#bbp_forum_type_select').val();
     17        var $bbp_forum_status       = $('#bbp_forum_status_select').val();
     18        var $bbp_forum_visibility   = $('#bbp_forum_visibility_select').val();
     19
     20        var data = {
     21            action:                     'bbp_save_bulk_edit',
     22            post_ids:                   $post_ids,
     23            bbp_forum_type:         $bbp_forum_type,
     24            bbp_forum_status:       $bbp_forum_status,
     25            bbp_forum_visibility:       $bbp_forum_visibility
     26        };
     27
     28        // save the data
     29        $.post( ajaxurl, data );
     30
     31    });
     32
     33} );
     34 No newline at end of file