Skip to:
Content

BuddyPress.org

Changeset 13452


Ignore:
Timestamp:
04/16/2023 02:57:37 PM (17 months ago)
Author:
imath
Message:

Improve the BP_Group_Extension to support the BP Rewrites API

  • Do the needed adaptations so that slugs used by plugins extending the

BP_Group_Extension can be customizable from the BP URls WP Admin
settings screen.

  • Do some code formatting cleanup in various class methods.

This commit also introduces a new filter bp_rewrites_pre_get_slug the BP
Classic plugin will be able to use to skip any slug customizations.

Props Props r-a-y, johnjamesjacoby, boonebgorges

Closes https://github.com/buddypress/buddypress/pull/86
See #4954

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-rewrites.php

    r13441 r13452  
    6868
    6969/**
    70  * Returns the slug to use for the view belonging to the requested component.
     70 * Returns the slug to use for the screen belonging to the requested component.
    7171 *
    7272 * @since 12.0.0
    7373 *
    7474 * @param string $component_id The BuddyPress component's ID.
    75  * @param string $rewrite_id   The view rewrite ID, used to find the custom slugs.
     75 * @param string $rewrite_id   The screen rewrite ID, used to find the custom slugs.
    7676 *                             Eg: `member_profile_edit` will try to find the xProfile edit's slug.
    77  * @param string $default_slug The view default slug, used as a fallback.
    78  * @return string The slug to use for the view belonging to the requested component.
     77 * @param string $default_slug The screen default slug, used as a fallback.
     78 * @return string The slug to use for the screen belonging to the requested component.
    7979 */
    8080function bp_rewrites_get_slug( $component_id = '', $rewrite_id = '', $default_slug = '' ) {
     81    /**
     82     * This filter is used by the BP Classic plugin to force `$default_slug` usage.
     83     *
     84     * Using the "Classic" BuddyPress means deprecated functions building URL concatening
     85     * URL chunks are available, we cannot use the BP Rewrites API in this case & as a result
     86     * slug customization is bypassed.
     87     *
     88     * The BP Classic plugin is simply returning the `$default_slug` to bypass slug customization.
     89     *
     90     * @since 12.0.0
     91     *
     92     * @param string $value        An empty string to use as to know whether slug customization should be used.
     93     * @param string $default_slug The screen default slug, used as a fallback.
     94     * @param string $rewrite_id   The screen rewrite ID, used to find the custom slugs.
     95     * @param string $component_id The BuddyPress component's ID.
     96     */
     97    $classic_slug = apply_filters( 'bp_rewrites_pre_get_slug', '', $default_slug, $rewrite_id, $component_id );
     98    if ( $classic_slug ) {
     99        return $classic_slug;
     100    }
     101
    81102    $directory_pages = bp_core_get_directory_pages();
    82103    $slug            = $default_slug;
  • trunk/src/bp-groups/classes/class-bp-group-extension.php

    r13446 r13452  
    189189
    190190    /**
     191     * The Callback function to use before showing the navigation item.
     192     *
     193     * @since 12.0.0
     194     * @var string
     195     */
     196    public $show_tab_callback = '';
     197
     198    /**
     199     * List of Group access levels.
     200     *
     201     * @since 12.0.0
     202     * @var string[]
     203     */
     204    public $access_levels = array( 'noone', 'admin', 'mod', 'member', 'loggedin', 'anyone' );
     205
     206    /**
    191207     * Whether the current user can visit the tab.
    192208     *
     
    292308     * @param int|null $group_id ID of the group to display.
    293309     */
    294     public function display( $group_id = null ) {}
     310    public function display( $group_id = null ) {
     311        return new WP_Error(
     312            'invalid-method',
     313            /* translators: %s: Method name. */
     314            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     315        );
     316    }
    295317
    296318    /**
     
    299321     * @since 1.1.0
    300322     */
    301     public function widget_display() {}
     323    public function widget_display() {
     324        return new WP_Error(
     325            'invalid-method',
     326            /* translators: %s: Method name. */
     327            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     328        );
     329    }
    302330
    303331    /*
     
    308336     * versions.
    309337     */
    310     public function settings_screen( $group_id = null ) {}
    311     public function settings_screen_save( $group_id = null ) {}
    312     public function edit_screen( $group_id = null ) {}
    313     public function edit_screen_save( $group_id = null ) {}
    314     public function create_screen( $group_id = null ) {}
    315     public function create_screen_save( $group_id = null ) {}
    316     public function admin_screen( $group_id = null ) {}
    317     public function admin_screen_save( $group_id = null ) {}
     338
     339    /**
     340     * Provide the fallback markup for Group's Create/Admin/Edit screens.
     341     *
     342     * @since 1.8.0
     343     *
     344     * @param int|null $group_id ID of the group to display.
     345     */
     346    public function settings_screen( $group_id = null ) {
     347        return new WP_Error(
     348            'invalid-method',
     349            /* translators: %s: Method name. */
     350            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     351        );
     352    }
     353
     354    /**
     355     * Group's Fallback handler for the Create/Admin/Edit screens.
     356     *
     357     * @since 1.8.0
     358     *
     359     * @param int|null $group_id ID of the group to display.
     360     */
     361    public function settings_screen_save( $group_id = null ) {
     362        return new WP_Error(
     363            'invalid-method',
     364            /* translators: %s: Method name. */
     365            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     366        );
     367    }
     368
     369    /**
     370     * The content of the Manage sub tab.
     371     *
     372     * @since 1.1.0
     373     *
     374     * @param int|null $group_id ID of the group to display.
     375     */
     376    public function edit_screen( $group_id = null ) {
     377        return new WP_Error(
     378            'invalid-method',
     379            /* translators: %s: Method name. */
     380            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     381        );
     382    }
     383
     384    /**
     385     * Group Manage sub tab handler.
     386     *
     387     * @since 1.1.0
     388     *
     389     * @param int|null $group_id ID of the group to display.
     390     */
     391    public function edit_screen_save( $group_id = null ) {
     392        return new WP_Error(
     393            'invalid-method',
     394            /* translators: %s: Method name. */
     395            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     396        );
     397    }
     398
     399    /**
     400     * The content of the group create step tab.
     401     *
     402     * @since 1.1.0
     403     *
     404     * @param int|null $group_id ID of the group to display.
     405     */
     406    public function create_screen( $group_id = null ) {
     407        return new WP_Error(
     408            'invalid-method',
     409            /* translators: %s: Method name. */
     410            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     411        );
     412    }
     413
     414    /**
     415     * Group create step tab handler.
     416     *
     417     * @since 1.1.0
     418     *
     419     * @param int|null $group_id ID of the group to display.
     420     */
     421    public function create_screen_save( $group_id = null ) {
     422        return new WP_Error(
     423            'invalid-method',
     424            /* translators: %s: Method name. */
     425            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     426        );
     427    }
     428
     429    /**
     430     * The content of Group's WP Administration screen metabox.
     431     *
     432     * @since 1.8.0
     433     *
     434     * @param int|null $group_id ID of the group to display.
     435     */
     436    public function admin_screen( $group_id = null ) {
     437        return new WP_Error(
     438            'invalid-method',
     439            /* translators: %s: Method name. */
     440            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     441        );
     442    }
     443
     444    /**
     445     * Group's WP Administration screen handler.
     446     *
     447     * @since 1.8.0
     448     *
     449     * @param int|null $group_id ID of the group to display.
     450     */
     451    public function admin_screen_save( $group_id = null ) {
     452        return new WP_Error(
     453            'invalid-method',
     454            /* translators: %s: Method name. */
     455            sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'buddypress' ), __METHOD__ )
     456        );
     457    }
    318458
    319459    /** Setup *************************************************************/
     
    337477     * @since 1.8.0
    338478     * @since 2.1.0 Added 'access' and 'show_tab' arguments to `$args`.
     479     * @since 12.0.0 Set the Group Extension screens.
    339480     *
    340481     * @param array $args {
     
    379520        $this->params_raw = $args;
    380521
    381         // Before this init() method was introduced, plugins were
    382         // encouraged to set their config directly. For backward
    383         // compatibility with these plugins, we detect whether this is
    384         // one of those legacy plugins, and parse any legacy arguments
    385         // with those passed to init().
     522        /*
     523         * Before this init() method was introduced, plugins were
     524         * encouraged to set their config directly. For backward
     525         * compatibility with these plugins, we detect whether this is
     526         * one of those legacy plugins, and parse any legacy arguments
     527         * with those passed to init().
     528         */
    386529        $this->parse_legacy_properties();
    387530        $args = $this->parse_args_r( $args, $this->legacy_properties_converted );
    388531
    389532        // Parse with defaults.
    390         $this->params = $this->parse_args_r( $args, array(
    391             'slug'              => $this->slug,
    392             'name'              => $this->name,
    393             'visibility'        => $this->visibility,
    394             'nav_item_position' => $this->nav_item_position,
    395             'enable_nav_item'   => (bool) $this->enable_nav_item,
    396             'nav_item_name'     => $this->nav_item_name,
    397             'display_hook'      => $this->display_hook,
    398             'template_file'     => $this->template_file,
    399             'screens'           => $this->get_default_screens(),
    400             'access'            => null,
    401             'show_tab'          => null,
    402         ) );
     533        $this->params = $this->parse_args_r(
     534            $args,
     535            array(
     536                'slug'              => $this->slug,
     537                'name'              => $this->name,
     538                'visibility'        => $this->visibility,
     539                'nav_item_position' => $this->nav_item_position,
     540                'enable_nav_item'   => (bool) $this->enable_nav_item,
     541                'nav_item_name'     => $this->nav_item_name,
     542                'display_hook'      => $this->display_hook,
     543                'template_file'     => $this->template_file,
     544                'screens'           => $this->get_default_screens(),
     545                'access'            => null,
     546                'show_tab'          => null,
     547            )
     548        );
     549
     550        $show_tab = $this->params['show_tab'];
     551        if ( $show_tab && ! in_array( $show_tab, $this->access_levels, true ) && is_callable( $show_tab ) ) {
     552            $this->show_tab_callback = $show_tab;
     553
     554            // Group Admin can always see.
     555            $this->params['show_tab'] = 'admin';
     556        }
    403557
    404558        $this->initialized = true;
     559
     560        // Specific to BP Rewrites.
     561        $bp                    = buddypress();
     562        $group_extension_class = get_class( $this );
     563        $slug                  = $this->params['slug'];
     564        $name                  = $this->params['name'];
     565        $rewrite_id_suffix     = str_replace( '-', '_', $slug );
     566
     567        // Populate Slugs And Names to allow BP Rewrites customizations.
     568        if ( isset( $bp->groups->group_extensions[ $group_extension_class ] ) ) {
     569            $default_data = array(
     570                'slug' => $slug,
     571                'name' => $name,
     572            );
     573
     574            $bp->groups->group_extensions[ $group_extension_class ] = array(
     575                'read'   => array(
     576                    $slug => array_merge(
     577                        $default_data,
     578                        array(
     579                            'rewrite_id' => 'bp_group_read_' . $rewrite_id_suffix,
     580                        )
     581                    ),
     582                ),
     583                'manage' => array(
     584                    $slug => array_merge(
     585                        $default_data,
     586                        array(
     587                            'rewrite_id' => 'bp_group_manage_' . $rewrite_id_suffix,
     588                        )
     589                    ),
     590                ),
     591                'create' => array(
     592                    $slug => array_merge(
     593                        $default_data,
     594                        array(
     595                            'rewrite_id' => 'bp_group_create_' . $rewrite_id_suffix,
     596                        )
     597                    ),
     598                ),
     599            );
     600
     601            if ( $this->params['nav_item_name'] ) {
     602                $bp->groups->group_extensions[ $group_extension_class ]['read']['name'] = $this->params['nav_item_name'];
     603            }
     604
     605            foreach ( $this->params['screens'] as $screen => $data ) {
     606                $screen_key = $screen;
     607                if ( 'admin' === $screen ) {
     608                    continue;
     609                }
     610
     611                if ( 'edit' === $screen ) {
     612                    $screen_key = 'manage';
     613                }
     614
     615                if ( ! $data['enabled'] ) {
     616                    unset( $bp->groups->group_extensions[ $group_extension_class ][ $screen_key ] );
     617                    continue;
     618                }
     619
     620                if ( isset( $data['slug'] ) && $data['slug'] ) {
     621                    $bp->groups->group_extensions[ $group_extension_class ][ $screen_key ][ $slug ]['slug'] = $data['slug'];
     622                }
     623
     624                if ( isset( $data['name'] ) && $data['name'] ) {
     625                    $bp->groups->group_extensions[ $group_extension_class ][ $screen_key ][ $slug ]['name'] = $data['name'];
     626                }
     627            }
     628        }
    405629    }
    406630
     
    494718
    495719        // On the admin, get the group id out of the $_GET params.
    496         if ( empty( $group_id ) && is_admin() && ( isset( $_GET['page'] ) && ( 'bp-groups' === $_GET['page'] ) ) && ! empty( $_GET['gid'] ) ) {
    497             $group_id = (int) $_GET['gid'];
    498         }
    499 
    500         // This fallback will only be hit when the create step is very
    501         // early.
     720        if ( empty( $group_id ) && is_admin() ) {
     721            // phpcs:disable WordPress.Security.NonceVerification
     722            $admin_page = '';
     723            if ( isset( $_GET['page'] ) ) {
     724                $admin_page = sanitize_text_field( wp_unslash( $_GET['page'] ) );
     725            }
     726
     727            if ( 'bp-groups' === $admin_page && isset( $_GET['gid'] ) ) {
     728                $group_id = (int) sanitize_text_field( wp_unslash( $_GET['gid'] ) );
     729            }
     730            // phpcs:enable WordPress.Security.NonceVerification
     731        }
     732
     733        /*
     734         * This fallback will only be hit when the create step is very
     735         * early.
     736         */
    502737        if ( empty( $group_id ) && bp_get_new_group_id() ) {
    503738            $group_id = bp_get_new_group_id();
    504739        }
    505740
    506         // On some setups, the group id has to be fetched out of the
    507         // $_POST array
    508         // @todo Figure out why this is happening during group creation.
     741        /*
     742         * On some setups, the group id has to be fetched out of the
     743         * $_POST array
     744         * @todo Figure out why this is happening during group creation.
     745         */
     746        // phpcs:disable WordPress.Security.NonceVerification
    509747        if ( empty( $group_id ) && isset( $_POST['group_id'] ) ) {
    510             $group_id = (int) $_POST['group_id'];
    511         }
     748            $group_id = (int) sanitize_text_field( wp_unslash( $_POST['group_id'] ) );
     749        }
     750        // phpcs:enable WordPress.Security.NonceVerification
    512751
    513752        return $group_id;
     
    588827        $this->user_can_visit = false;
    589828
    590         // Backward compatibility for components that do not provide
    591         // explicit 'access' parameter.
     829        /*
     830         * Backward compatibility for components that do not provide
     831         * explicit 'access' parameter.
     832         */
    592833        if ( empty( $this->params['access'] ) ) {
    593834            if ( false === $this->params['enable_nav_item'] ) {
     
    612853        }
    613854
    614         // If the current user meets at least one condition, the
    615         // get access.
     855        /*
     856         * If the current user meets at least one condition, the
     857         * get access.
     858         */
    616859        foreach ( $access_conditions as $access_condition ) {
    617860            if ( $this->user_meets_access_condition( $access_condition ) ) {
     
    624867        $this->user_can_see_nav_item = false;
    625868
    626         // Backward compatibility for components that do not provide
    627         // explicit 'show_tab' parameter.
     869        /*
     870         * Backward compatibility for components that do not provide
     871         * explicit 'show_tab' parameter.
     872         */
    628873        if ( empty( $this->params['show_tab'] ) ) {
    629874            if ( false === $this->params['enable_nav_item'] ) {
    630                 // The enable_nav_item index is only false if it's been
    631                 // defined explicitly as such in the
    632                 // constructor. So we always trust this value.
     875                /*
     876                 * The enable_nav_item index is only false if it's been
     877                 * defined explicitly as such in the
     878                 * constructor. So we always trust this value.
     879                 */
    633880                $this->params['show_tab'] = 'noone';
    634881
    635882            } elseif ( isset( $this->params_raw['enable_nav_item'] ) || isset( $this->params_raw['visibility'] ) ) {
    636                 // If enable_nav_item or visibility is passed,
    637                 // we assume this  is a legacy extension.
    638                 // Legacy behavior is that enable_nav_item=true +
    639                 // visibility=private implies members-only.
     883                /*
     884                 * If enable_nav_item or visibility is passed,
     885                 * we assume this  is a legacy extension.
     886                 * Legacy behavior is that enable_nav_item=true +
     887                 * visibility=private implies members-only.
     888                 */
    640889                if ( 'public' !== $this->visibility ) {
    641890                    $this->params['show_tab'] = 'member';
     
    645894
    646895            } else {
    647                 // No show_tab or enable_nav_item value is
    648                 // available, so match the value of 'access'.
     896                /*
     897                 * No show_tab or enable_nav_item value is
     898                 * available, so match the value of 'access'.
     899                 */
    649900                $this->params['show_tab'] = $this->params['access'];
    650901            }
     
    657908        }
    658909
    659         // If the current user meets at least one condition, the
    660         // get access.
     910        /*
     911         * If the current user meets at least one condition, the
     912         * get access.
     913         */
    661914        foreach ( $access_conditions as $access_condition ) {
    662915            if ( $this->user_meets_access_condition( $access_condition ) ) {
     
    711964
    712965    /**
     966     * Returns the Rewrite ID of the Group Extension Item according to the context.
     967     *
     968     * @since 12.0.0
     969     *
     970     * @param string $context One of these contexts: 'create', 'manage', 'read'.
     971     * @return string         The found Rewrite ID, an empty string otherwise.
     972     */
     973    protected function get_rewrite_id_for( $context = '' ) {
     974        $rewrite_id            = '';
     975        $group_extensions      = buddypress()->groups->group_extensions;
     976        $group_extension_class = get_class( $this );
     977
     978        if ( isset( $group_extensions[ $group_extension_class ][ $context ][ $this->slug ]['rewrite_id'] ) ) {
     979            $rewrite_id = $group_extensions[ $group_extension_class ][ $context ][ $this->slug ]['rewrite_id'];
     980        }
     981
     982        return $rewrite_id;
     983    }
     984
     985    /**
    713986     * Hook this extension's group tab into BuddyPress, if necessary.
    714987     *
     
    7301003        $user_can_see_nav_item = $this->user_can_see_nav_item();
    7311004
    732         if ( $user_can_see_nav_item ) {
    733             $group_permalink = bp_get_group_url( groups_get_current_group() );
    734 
    735             bp_core_create_subnav_link( array(
    736                 'name'            => ! $this->nav_item_name ? $this->name : $this->nav_item_name,
    737                 'slug'            => $this->slug,
    738                 'parent_slug'     => bp_get_current_group_slug(),
    739                 'position'        => $this->nav_item_position,
    740                 'item_css_id'     => 'nav-' . $this->slug,
    741                 'screen_function' => array( &$this, '_display_hook' ),
    742                 'user_has_access' => $user_can_see_nav_item,
    743                 'no_access_url'   => $group_permalink,
    744             ), 'groups' );
    745         }
    746 
    7471005        // If the user can visit the screen, we register it.
    7481006        $user_can_visit = $this->user_can_visit();
    7491007
     1008        if ( $user_can_see_nav_item || $user_can_visit ) {
     1009            $group_permalink = bp_get_group_url( groups_get_current_group() );
     1010        }
     1011
     1012        if ( $user_can_see_nav_item ) {
     1013            bp_core_create_subnav_link(
     1014                array(
     1015                    'name'            => ! $this->nav_item_name ? $this->name : $this->nav_item_name,
     1016                    'slug'            => $this->slug,
     1017                    'parent_slug'     => bp_get_current_group_slug(),
     1018                    'position'        => $this->nav_item_position,
     1019                    'item_css_id'     => 'nav-' . $this->slug,
     1020                    'screen_function' => array( &$this, '_display_hook' ),
     1021                    'user_has_access' => $user_can_see_nav_item,
     1022                    'no_access_url'   => $group_permalink,
     1023                ),
     1024                'groups'
     1025            );
     1026        }
     1027
    7501028        if ( $user_can_visit ) {
    751             $group_permalink = bp_get_group_url( groups_get_current_group() );
    752 
    753             bp_core_register_subnav_screen_function( array(
    754                 'slug'            => $this->slug,
    755                 'parent_slug'     => bp_get_current_group_slug(),
    756                 'screen_function' => array( &$this, '_display_hook' ),
    757                 'user_has_access' => $user_can_visit,
    758                 'no_access_url'   => $group_permalink,
    759             ), 'groups' );
     1029            bp_core_register_subnav_screen_function(
     1030                array(
     1031                    'slug'            => $this->slug,
     1032                    'parent_slug'     => bp_get_current_group_slug(),
     1033                    'screen_function' => array( &$this, '_display_hook' ),
     1034                    'user_has_access' => $user_can_visit,
     1035                    'no_access_url'   => $group_permalink,
     1036                ),
     1037                'groups'
     1038            );
    7601039
    7611040            // When we are viewing the extension display page, set the title and options title.
     
    7641043
    7651044                $extension_name = $this->name;
    766                 add_action( 'bp_template_content_header', function() use ( $extension_name ) {
    767                     echo esc_attr( $extension_name );
    768                 } );
    769                 add_action( 'bp_template_title', function() use ( $extension_name ) {
    770                     echo esc_attr( $extension_name );
    771                 } );
     1045                add_action(
     1046                    'bp_template_content_header',
     1047                    function() use ( $extension_name ) {
     1048                        echo esc_attr( $extension_name );
     1049                    }
     1050                );
     1051                add_action(
     1052                    'bp_template_title',
     1053                    function() use ( $extension_name ) {
     1054                        echo esc_attr( $extension_name );
     1055                    }
     1056                );
    7721057            }
    7731058        }
     
    8271112        }
    8281113
     1114        if ( $this->show_tab_callback ) {
     1115            return call_user_func( $this->show_tab_callback );
     1116        }
     1117
    8291118        return $this->user_can_see_nav_item;
    8301119    }
     
    8941183        }
    8951184
     1185        $bp     = buddypress();
    8961186        $screen = $this->screens['create'];
    8971187
    898         // Insert the group creation step for the new group extension.
    899         buddypress()->groups->group_creation_steps[ $screen['slug'] ] = array(
    900             'name'     => $screen['name'],
    901             'slug'     => $screen['slug'],
    902             'position' => $screen['position'],
    903         );
    904 
    905         // The maybe_ methods check to see whether the create_*
    906         // callbacks should be invoked (ie, are we on the
    907         // correct group creation step). Hooked in separate
    908         // methods because current creation step info not yet
    909         // available at this point.
     1188        if ( ! isset( $bp->groups->group_creation_steps[ $screen['slug'] ] ) ) {
     1189            $create_data = array(
     1190                'name'     => $screen['name'],
     1191                'slug'     => $screen['slug'],
     1192                'position' => $screen['position'],
     1193            );
     1194
     1195            $rewrite_id = $this->get_rewrite_id_for( 'create' );
     1196            if ( $rewrite_id ) {
     1197                $create_data['rewrite_id']   = $rewrite_id;
     1198                $create_data['default_slug'] = $screen['slug'];
     1199            }
     1200
     1201            // Insert the group creation step for the new group extension.
     1202            $bp->groups->group_creation_steps[ $screen['slug'] ] = $create_data;
     1203        }
     1204
     1205        /*
     1206         * The maybe_ methods check to see whether the create_*
     1207         * callbacks should be invoked (ie, are we on the
     1208         * correct group creation step). Hooked in separate
     1209         * methods because current creation step info not yet
     1210         * available at this point.
     1211         */
    9101212        add_action( 'groups_custom_create_steps', array( $this, 'maybe_create_screen' ) );
    9111213        add_action( 'groups_create_group_step_save_' . $screen['slug'], array( $this, 'maybe_create_screen_save' ) );
     
    9251227        $this->nonce_field( 'create' );
    9261228
    927         // The create screen requires an additional nonce field
    928         // due to a quirk in the way the templates are built.
     1229        /*
     1230         * The create screen requires an additional nonce field
     1231         * due to a quirk in the way the templates are built.
     1232         */
    9291233        wp_nonce_field( 'groups_create_save_' . bp_get_groups_current_create_step(), '_wpnonce', false );
    9301234    }
     
    9901294            add_action( 'groups_custom_edit_steps', array( &$this, 'call_edit_screen' ) );
    9911295
    992             // Determine the proper template and save for later
    993             // loading.
     1296            /*
     1297             * Determine the proper template and save for later
     1298             * loading.
     1299             */
    9941300            if ( '' !== bp_locate_template( array( 'groups/single/home.php' ), false ) ) {
    9951301                $this->edit_screen_template = '/groups/single/home';
     
    10041310            }
    10051311
    1006             // We load the template at bp_screens, to give all
    1007             // extensions a chance to load.
     1312            /*
     1313             * We load the template at bp_screens, to give all
     1314             * extensions a chance to load.
     1315             */
    10081316            add_action( 'bp_screens', array( $this, 'call_edit_screen_template_loader' ) );
    10091317        }
     
    10461354        }
    10471355
    1048         // When DOING_AJAX, the POST global will be populated, but we
    1049         // should assume it's a save.
    1050         if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
     1356        /*
     1357         * When DOING_AJAX, the POST global will be populated, but we
     1358         * should assume it's a save.
     1359         */
     1360        if ( wp_doing_ajax() ) {
    10511361            return;
    10521362        }
     
    10541364        $this->check_nonce( 'edit' );
    10551365
    1056         // Detect whether the screen_save_callback is performing a
    1057         // redirect, so that we don't do one of our own.
     1366        /*
     1367         * Detect whether the screen_save_callback is performing a
     1368         * redirect, so that we don't do one of our own.
     1369         */
    10581370        add_filter( 'wp_redirect', array( $this, 'detect_post_save_redirect' ) );
    10591371
     
    12071519     */
    12081520    public function _meta_box_display_callback() {
    1209         $group_id = isset( $_GET['gid'] ) ? (int) $_GET['gid'] : 0;
    1210         $screen   = $this->screens['admin'];
     1521        // phpcs:disable WordPress.Security.NonceVerification
     1522        $group_id = 0;
     1523        if ( isset( $_GET['gid'] ) ) {
     1524            $group_id = (int) sanitize_text_field( wp_unslash( $_GET['gid'] ) );
     1525        }
     1526        // phpcs:enable WordPress.Security.NonceVerification
     1527
     1528        $screen = $this->screens['admin'];
    12111529
    12121530        $extension_slug = $this->slug;
    1213         $callback = function() use ( $extension_slug, $group_id ) {
     1531        $callback       = function() use ( $extension_slug, $group_id ) {
    12141532            do_action( 'bp_groups_admin_meta_box_content_' . $extension_slug, $group_id );
    12151533        };
Note: See TracChangeset for help on using the changeset viewer.