Skip to:
Content

Ticket #6014: 6014.02.diff

File 6014.02.diff, 27.7 KB (added by dcavins, 10 months ago)

Add support for changing group slug via wp-admin.

  • src/bp-groups/admin/css/admin.css

    diff --git a/src/bp-groups/admin/css/admin.css b/src/bp-groups/admin/css/admin.css
    index c802127..d32bd31 100644
    a b body.toplevel_page_bp-groups table.groups th#last_active { 
    4646        line-height: 24px; 
    4747        color: #666; 
    4848} 
     49#bp-groups-permalink { 
     50        margin-right: 24px; 
     51} 
    4952.bp-groups-member-type { 
    5053        position: relative; 
    5154} 
  • src/bp-groups/bp-groups-activity.php

    diff --git a/src/bp-groups/bp-groups-activity.php b/src/bp-groups/bp-groups-activity.php
    index c29a03c..cb7c69c 100644
    a b function bp_groups_format_activity_action_group_details_updated( $action, $activ 
    190190        } elseif ( ! empty( $changed['description']['old'] ) && ! empty( $changed['description']['new'] ) ) { 
    191191                $action = sprintf( __( '%1$s changed the description of the group %2$s from "%3$s" to "%4$s"', 'buddypress' ), $user_link, $group_link, esc_html( $changed['description']['old'] ), esc_html( $changed['description']['new'] ) ); 
    192192 
     193        } elseif ( ! empty( $changed['slug']['old'] ) && ! empty( $changed['slug']['new'] ) ) { 
     194                $action = sprintf( __( '%1$s changed the permalink of the group %2$s.', 'buddypress' ), $user_link, $group_link ); 
     195 
    193196        } 
    194197 
    195198        /** 
    function bp_groups_group_details_updated_add_activity( $group_id, $old_group, $n 
    461464                return false; 
    462465        } 
    463466 
    464         if ( ! isset( $old_group->name ) || ! isset( $old_group->description ) ) { 
     467        if ( ! isset( $old_group->name ) || ! isset( $old_group->slug ) || ! isset( $old_group->description ) ) { 
    465468                return false; 
    466469        } 
    467470 
    function bp_groups_group_details_updated_add_activity( $group_id, $old_group, $n 
    489492                ); 
    490493        } 
    491494 
     495        if ( $group->slug !== $old_group->slug ) { 
     496                $changed['slug'] = array( 
     497                        'old' => $old_group->slug, 
     498                        'new' => $group->slug, 
     499                ); 
     500        } 
     501 
    492502        if ( $group->description !== $old_group->description ) { 
    493503                $changed['description'] = array( 
    494504                        'old' => $old_group->description, 
  • src/bp-groups/bp-groups-admin.php

    diff --git a/src/bp-groups/bp-groups-admin.php b/src/bp-groups/bp-groups-admin.php
    index 77f13e1..c3cdac9 100644
    a b function bp_groups_admin_load() { 
    236236                $error = 0; 
    237237                $success_new = $error_new = $success_modified = $error_modified = array(); 
    238238 
    239                 // Group name and description are handled with 
    240                 // groups_edit_base_group_details(). 
    241                 if ( !groups_edit_base_group_details( $group_id, $_POST['bp-groups-name'], $_POST['bp-groups-description'], 0 ) ) { 
    242                         $error = $group_id; 
     239                // Name, description and slug must not be empty. 
     240                if ( empty( $_POST['bp-groups-name'] ) ) { 
     241                        $error = $error - 1; 
     242                } 
     243                if ( empty( $_POST['bp-groups-description'] ) ) { 
     244                        $error = $error - 2; 
     245                } 
     246                if ( empty( $_POST['bp-groups-slug'] ) ) { 
     247                        $error = $error - 4; 
     248                } 
    243249 
    244                         // Using negative integers for different error messages... eek! 
    245                         if ( empty( $_POST['bp-groups-name'] ) && empty( $_POST['bp-groups-description'] ) ) { 
    246                                 $error = -3; 
    247                         } elseif ( empty( $_POST['bp-groups-name'] ) ) { 
    248                                 $error = -1; 
    249                         } elseif ( empty( $_POST['bp-groups-description'] ) ) { 
    250                                 $error = -2; 
    251                         } 
     250                /* 
     251                 * Group name, slug, and description are handled with 
     252                 * groups_edit_base_group_details(). 
     253                 */ 
     254                if ( ! $error && ! groups_edit_base_group_details( array( 
     255                                'group_id'       => $group_id, 
     256                                'name'           => $_POST['bp-groups-name'], 
     257                                'slug'           => $_POST['bp-groups-slug'], 
     258                                'description'    => $_POST['bp-groups-description'], 
     259                                'notify_members' => false, 
     260                        ) ) ) { 
     261                        $error = $group_id; 
    252262                } 
    253263 
    254264                // Enable discussion forum. 
    function bp_groups_admin_edit() { 
    518528                } 
    519529 
    520530                if ( ! empty( $errors ) ) { 
    521                         switch ( $errors ) { 
    522                                 case -1 : 
    523                                         $messages[] = __( 'Group name cannot be empty.', 'buddypress' ); 
    524                                         break; 
    525  
    526                                 case -2 : 
    527                                         $messages[] = __( 'Group description cannot be empty.', 'buddypress' ); 
    528                                         break; 
    529  
    530                                 case -3 : 
    531                                         $messages[] = __( 'Group name and description cannot be empty.', 'buddypress' ); 
    532                                         break; 
    533  
    534                                 default : 
    535                                         $messages[] = __( 'An error occurred when trying to update your group details.', 'buddypress' ); 
    536                                         break; 
     531                        if ( $errors < 0 ) { 
     532                                $messages[] = __( 'Group name, slug, and description are all required fields.', 'buddypress' ); 
     533                        } else { 
     534                                $messages[] = __( 'An error occurred when trying to update your group details.', 'buddypress' ); 
    537535                        } 
    538536 
    539537                } elseif ( ! empty( $updated ) ) { 
    function bp_groups_admin_edit() { 
    612610                                                                                ?></label> 
    613611                                                                                <input type="text" name="bp-groups-name" id="bp-groups-name" value="<?php echo esc_attr( stripslashes( $group_name ) ) ?>" /> 
    614612                                                                                <div id="bp-groups-permalink-box"> 
    615                                                                                         <strong><?php esc_html_e( 'Permalink:', 'buddypress' ) ?></strong> <span id="sample-permalink"><?php bp_group_permalink( $group ) ?></span> <a href="<?php echo bp_group_permalink( $group ) ?>" class="button button-small" id="bp-groups-visit-group"><?php esc_html_e( 'Visit Group', 'buddypress' ) ?></a> 
     613                                                                                        <strong><?php esc_html_e( 'Permalink:', 'buddypress' ) ?></strong> 
     614                                                                                        <span id="bp-groups-permalink"> 
     615                                                                                                <?php bp_groups_directory_permalink(); ?> <input type="text" id="bp-groups-slug" name="bp-groups-slug" value="<?php bp_group_slug( $group ); ?>" autocomplete="off"> / 
     616                                                                                        </span> 
     617                                                                                        <a href="<?php echo bp_group_permalink( $group ) ?>" class="button button-small" id="bp-groups-visit-group"><?php esc_html_e( 'Visit Group', 'buddypress' ) ?></a> 
    616618                                                                                </div> 
    617619 
    618620                                                                                <label for="bp-groups-description" class="screen-reader-text"><?php 
  • src/bp-groups/bp-groups-functions.php

    diff --git a/src/bp-groups/bp-groups-functions.php b/src/bp-groups/bp-groups-functions.php
    index c65af89..1f316b1 100644
    a b function groups_create_group( $args = '' ) { 
    218218 * 
    219219 * @since 1.0.0 
    220220 * 
    221  * @param int    $group_id       ID of the group. 
    222  * @param string $group_name     Name of the group. 
    223  * @param string $group_desc     Description of the group. 
    224  * @param bool   $notify_members Whether to send an email notification to group 
    225  *                               members about changes in these details. 
     221 * @param array $args { 
     222 *     An array of optional arguments. 
     223 *     @type int    $group_id       ID of the group. 
     224 *     @type string $name           Name of the group. 
     225 *     @type string $slug           Slug of the group. 
     226 *     @type string $description    Description of the group. 
     227 *     @type bool   $notify_members Whether to send an email notification to group 
     228 *                                  members about changes in these details. 
     229 * } 
    226230 * @return bool True on success, false on failure. 
    227231 */ 
    228 function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $notify_members ) { 
     232function groups_edit_base_group_details( $args = array() ) { 
    229233 
    230         if ( empty( $group_name ) || empty( $group_desc ) ) 
     234        // Backward compatibility with old method of passing arguments. 
     235        if ( ! is_array( $args ) || func_num_args() > 1 ) { 
     236                _deprecated_argument( __METHOD__, '2.9.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) ); 
     237 
     238                $old_args_keys = array( 
     239                        0 => 'group_id', 
     240                        1 => 'name', 
     241                        2 => 'description', 
     242                        3 => 'notify_members', 
     243                ); 
     244 
     245                $args = bp_core_parse_args_array( $old_args_keys, func_get_args() ); 
     246        } 
     247 
     248        $r = wp_parse_args( $args, array( 
     249                'group_id'       => bp_get_current_group_id(), 
     250                'name'           => null, 
     251                'slug'           => null, 
     252                'description'    => null, 
     253                'notify_members' => false, 
     254        ) ); 
     255 
     256        if ( ! $r['group_id'] ) { 
    231257                return false; 
     258        } 
    232259 
    233         $group     = groups_get_group( $group_id ); 
     260        $group     = groups_get_group( $r['group_id'] ); 
    234261        $old_group = clone $group; 
    235262 
    236         $group->name        = $group_name; 
    237         $group->description = $group_desc; 
     263        // Group name, slug and description can never be empty. Update only if provided. 
     264        if ( $r['name'] ) { 
     265                $group->name = $r['name']; 
     266        } 
     267        if ( $r['slug']  && $r['slug'] != $group->slug ) { 
     268                $group->slug = groups_check_slug( $r['slug'] ); 
     269        } 
     270        if ( $r['description'] ) { 
     271                $group->description = $r['description']; 
     272        } 
    238273 
    239         if ( !$group->save() ) 
     274        if ( ! $group->save() ) { 
    240275                return false; 
     276        } 
     277 
     278        // Maybe update the "previous_slug" groupmeta. 
     279        if ( $group->slug != $old_group->slug ) { 
     280                /* 
     281                 * If the old slug exists in this group's past, delete that entry. 
     282                 * Recent previous_slugs are preferred when selecting the current group 
     283                 * from an old group slug, so we want the previous slug to be 
     284                 * saved "now" in the groupmeta table and don't need the old record. 
     285                 */ 
     286                groups_delete_groupmeta( $group->id, 'previous_slug', $old_group->slug ); 
     287                groups_add_groupmeta( $group->id, 'previous_slug', $old_group->slug ); 
     288        } 
    241289 
    242         if ( $notify_members ) { 
     290        if ( $r['notify_members'] ) { 
    243291                groups_notification_group_updated( $group->id, $old_group ); 
    244292        } 
    245293 
    function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $n 
    252300         * @param BP_Groups_Group $old_group      Group object, before being modified. 
    253301         * @param bool            $notify_members Whether to send an email notification to members about the change. 
    254302         */ 
    255         do_action( 'groups_details_updated', $group->id, $old_group, $notify_members ); 
     303        do_action( 'groups_details_updated', $group->id, $old_group, $r['notify_members'] ); 
    256304 
    257305        return true; 
    258306} 
    function groups_get_id( $group_slug ) { 
    428476        return BP_Groups_Group::group_exists( $group_slug ); 
    429477} 
    430478 
     479/** 
     480 * Get a group ID by checking against old (not currently active) slugs. 
     481 * 
     482 * @since 2.9.0 
     483 * 
     484 * @param string $group_slug The group's slug. 
     485 * @return int|null The group ID on success; null on failure. 
     486 */ 
     487function groups_get_id_by_previous_slug( $group_slug ) { 
     488        return BP_Groups_Group::get_id_by_previous_slug( $group_slug ); 
     489} 
     490 
    431491/** User Actions **************************************************************/ 
    432492 
    433493/** 
  • src/bp-groups/bp-groups-notifications.php

    diff --git a/src/bp-groups/bp-groups-notifications.php b/src/bp-groups/bp-groups-notifications.php
    index fc8a052..5bf44fd 100644
    a b function groups_notification_group_updated( $group_id = 0, $old_group = null ) { 
    4444                                esc_html( $group->description ) 
    4545                        ); 
    4646                } 
     47 
     48                if ( $group->slug !== $old_group->slug ) { 
     49                        $changed[] = sprintf( 
     50                                _x( '* Permalink changed from "%s" to "%s".', 'Group update email text', 'buddypress' ), 
     51                                esc_url( bp_get_group_permalink( $old_group ) ), 
     52                                esc_url( bp_get_group_permalink( $group ) ) 
     53                        ); 
     54                } 
    4755        } 
    4856 
    4957        /** 
  • src/bp-groups/bp-groups-screens.php

    diff --git a/src/bp-groups/bp-groups-screens.php b/src/bp-groups/bp-groups-screens.php
    index 17e139b..b02419f 100644
    a b function groups_screen_group_admin_edit_details() { 
    839839 
    840840                        $group_notify_members = isset( $_POST['group-notify-members'] ) ? (int) $_POST['group-notify-members'] : 0; 
    841841 
    842                         if ( !groups_edit_base_group_details( $_POST['group-id'], $_POST['group-name'], $_POST['group-desc'], $group_notify_members ) ) { 
     842                        // Name and description are required and may not be empty. 
     843                        if ( empty( $_POST['group-name'] ) || empty( $_POST['group-desc'] ) ) { 
     844                                bp_core_add_message( __( 'Groups must have a name and a description. Please try again.', 'buddypress' ), 'error' ); 
     845                        } elseif ( ! groups_edit_base_group_details( array( 
     846                                'group_id'       => $_POST['group-id'], 
     847                                'name'           => $_POST['group-name'], 
     848                                'slug'           => null, // @TODO: Add to settings pane? If yes, editable by site admin only, or allow group admins to do this? 
     849                                'description'    => $_POST['group-desc'], 
     850                                'notify_members' => $group_notify_members, 
     851                        ) ) ) { 
    843852                                bp_core_add_message( __( 'There was an error updating group details. Please try again.', 'buddypress' ), 'error' ); 
    844853                        } else { 
    845854                                bp_core_add_message( __( 'Group details were successfully updated.', 'buddypress' ) ); 
  • src/bp-groups/classes/class-bp-groups-component.php

    diff --git a/src/bp-groups/classes/class-bp-groups-component.php b/src/bp-groups/classes/class-bp-groups-component.php
    index 8515a5b..e271ec0 100644
    a b class BP_Groups_Component extends BP_Component { 
    196196                /* Single Group Globals **********************************************/ 
    197197 
    198198                // Are we viewing a single group? 
    199                 if ( bp_is_groups_component() && $group_id = BP_Groups_Group::group_exists( bp_current_action() ) ) { 
    200  
     199                if ( bp_is_groups_component() 
     200                        && ( ( $group_id = BP_Groups_Group::group_exists( bp_current_action() ) ) 
     201                                || ( $group_id = BP_Groups_Group::get_id_by_previous_slug( bp_current_action() ) ) ) 
     202                        ) { 
    201203                        $bp->is_single_item  = true; 
    202204 
    203205                        /** 
  • src/bp-groups/classes/class-bp-groups-group.php

    diff --git a/src/bp-groups/classes/class-bp-groups-group.php b/src/bp-groups/classes/class-bp-groups-group.php
    index bd897d8..029093e 100644
    a b class BP_Groups_Group { 
    645645        } 
    646646 
    647647        /** 
     648         * Get whether a group exists for an old slug. 
     649         * 
     650         * @since 2.9.0 
     651         * 
     652         * @param string      $slug       Slug to check. 
     653         * 
     654         * @return int|null|false Group ID if found; null if not; false if missing parameters. 
     655         */ 
     656        public static function get_id_by_previous_slug( $slug ) { 
     657                global $wpdb; 
     658 
     659                if ( empty( $slug ) ) { 
     660                        return false; 
     661                } 
     662 
     663                $args = array( 
     664                        'meta_query'         => array( 
     665                                array( 
     666                                        'key'   => 'previous_slug', 
     667                                        'value' => $slug 
     668                                ), 
     669                        ), 
     670                        'orderby'           => 'meta_id', 
     671                        'order'              => 'DESC', 
     672                        'per_page'           => 1, 
     673                        'page'               => 1, 
     674                        'update_meta_cache'  => false, 
     675                        'show_hidden'        => true, 
     676                ); 
     677                $groups = BP_Groups_Group::get( $args ); 
     678 
     679                $group_id = null; 
     680                if ( $groups['groups'] ) { 
     681                        $group_id = current( $groups['groups'] )->id; 
     682                } 
     683 
     684                return $group_id; 
     685        } 
     686 
     687        /** 
    648688         * Get IDs of users with outstanding invites to a given group from a specified user. 
    649689         * 
    650690         * @since 1.6.0 
    class BP_Groups_Group { 
    11131153                        $where_conditions['last_activity'] = "gm_last_activity.meta_key = 'last_activity'"; 
    11141154                } 
    11151155 
     1156                // If Meta ID is the requested order, and there's no meta query, fall back to the default. 
     1157                if ( 'meta_id' === $orderby && empty( $meta_query_sql['join'] ) ) { 
     1158                        $orderby = 'date_created'; 
     1159                } 
     1160 
    11161161                // Sanitize 'order'. 
    11171162                $order = bp_esc_sql_order( $order ); 
    11181163 
    class BP_Groups_Group { 
    14151460                        case 'random' : 
    14161461                                $order_by_term = 'rand()'; 
    14171462                                break; 
     1463 
     1464                        case 'meta_id' : 
     1465                                $order_by_term = buddypress()->groups->table_name_groupmeta . '.id'; 
     1466                                break; 
    14181467                } 
    14191468 
    14201469                return $order_by_term; 
  • tests/phpunit/testcases/groups/activity.php

    diff --git a/tests/phpunit/testcases/groups/activity.php b/tests/phpunit/testcases/groups/activity.php
    index 1946326..bfb4087 100644
    a b class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    5555         */ 
    5656        public function test_bp_groups_format_activity_action_group_details_updated_with_no_change() { 
    5757                $group = $this->factory->group->create_and_get(); 
    58                 groups_edit_base_group_details( $group->id, $group->name, $group->description, true ); 
     58                groups_edit_base_group_details( array( 
     59                                'group_id'       => $group->id, 
     60                                'name'           => $group->name, 
     61                                'slug'           => $group->slug, 
     62                                'description'    => $group->description, 
     63                                'notify_members' => true, 
     64                ) ); 
    5965 
    6066                $a = bp_activity_get( array( 
    6167                        'component' => buddypress()->groups->id, 
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    7278         */ 
    7379        public function test_bp_groups_format_activity_action_group_details_updated_with_notify_members_false() { 
    7480                $group = $this->factory->group->create_and_get(); 
    75                 groups_edit_base_group_details( $group->id, 'Foo', $group->description, false ); 
     81                groups_edit_base_group_details( array( 
     82                        'group_id'       => $group->id, 
     83                        'name'           => 'Foo', 
     84                        'slug'           => $group->slug, 
     85                        'description'    => $group->description, 
     86                        'notify_members' => false, 
     87                ) ); 
    7688 
    7789                $a = bp_activity_get( array( 
    7890                        'component' => buddypress()->groups->id, 
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    93105                $this->set_current_user( $u ); 
    94106 
    95107                $group = $this->factory->group->create_and_get(); 
    96                 groups_edit_base_group_details( $group->id, 'Foo', $group->description, true ); 
     108                groups_edit_base_group_details( array( 
     109                        'group_id'       => $group->id, 
     110                        'name'           => 'Foo', 
     111                        'slug'           => $group->slug, 
     112                        'description'    => $group->description, 
     113                        'notify_members' => true, 
     114                ) ); 
    97115 
    98116                $a = bp_activity_get( array( 
    99117                        'component' => buddypress()->groups->id, 
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    119137                $this->set_current_user( $u ); 
    120138 
    121139                $group = $this->factory->group->create_and_get(); 
    122                 groups_edit_base_group_details( $group->id, $group->name, 'Bar', true ); 
     140                groups_edit_base_group_details( array( 
     141                        'group_id'       => $group->id, 
     142                        'name'           => $group->name, 
     143                        'slug'           => $group->slug, 
     144                        'description'    => 'Bar', 
     145                        'notify_members' => true, 
     146                ) ); 
    123147 
    124148                $a = bp_activity_get( array( 
    125149                        'component' => buddypress()->groups->id, 
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    139163         * @group activity_action 
    140164         * @group bp_groups_format_activity_action_group_details_updated 
    141165         */ 
     166        public function test_bp_groups_format_activity_action_group_details_updated_with_updated_slug() { 
     167                $old_user = get_current_user_id(); 
     168                $u = $this->factory->user->create(); 
     169                $this->set_current_user( $u ); 
     170 
     171                $group = $this->factory->group->create_and_get(); 
     172                groups_edit_base_group_details( array( 
     173                        'group_id'       => $group->id, 
     174                        'name'           => $group->name, 
     175                        'slug'           => 'flaxen', 
     176                        'description'    => $group->description, 
     177                        'notify_members' => true, 
     178                ) ); 
     179                $new_group_details = groups_get_group( $group->id ); 
     180 
     181                $a = bp_activity_get( array( 
     182                        'component' => buddypress()->groups->id, 
     183                        'action' => 'group_details_updated', 
     184                        'item_id' => $group->id, 
     185                ) ); 
     186 
     187                $this->assertNotEmpty( $a['activities'] ); 
     188 
     189                $expected = sprintf( __( '%s changed the permalink of the group %s.', 'buddypress' ), bp_core_get_userlink( $u ),  '<a href="' . bp_get_group_permalink( $new_group_details ) . '">' . $group->name . '</a>' ); 
     190                $this->assertSame( $expected, $a['activities'][0]->action ); 
     191 
     192                $this->set_current_user( $old_user ); 
     193        } 
     194 
     195        /** 
     196         * @group activity_action 
     197         * @group bp_groups_format_activity_action_group_details_updated 
     198         */ 
    142199        public function test_bp_groups_format_activity_action_group_details_updated_with_updated_name_and_description() { 
    143200                $old_user = get_current_user_id(); 
    144201                $u = $this->factory->user->create(); 
    145202                $this->set_current_user( $u ); 
    146203 
    147204                $group = $this->factory->group->create_and_get(); 
    148                 groups_edit_base_group_details( $group->id, 'Foo', 'Bar', true ); 
     205                groups_edit_base_group_details( array( 
     206                        'group_id'       => $group->id, 
     207                        'name'           => 'Foo', 
     208                        'slug'           => $group->slug, 
     209                        'description'    => 'Bar', 
     210                        'notify_members' => true, 
     211                ) ); 
    149212 
    150213                $a = bp_activity_get( array( 
    151214                        'component' => buddypress()->groups->id, 
  • tests/phpunit/testcases/groups/class-bp-groups-group.php

    diff --git a/tests/phpunit/testcases/groups/class-bp-groups-group.php b/tests/phpunit/testcases/groups/class-bp-groups-group.php
    index 0fcc1d5..5178354 100644
    a b class BP_Tests_BP_Groups_Group_TestCases extends BP_UnitTestCase { 
    956956                $this->assertEquals( _BP_Groups_Group::_convert_orderby_to_order_by_term( 'date_created' ), _BP_Groups_Group::_convert_orderby_to_order_by_term( 'I am a bad boy' ) ); 
    957957        } 
    958958 
     959        /** 
     960         * @group groups_get_orderby_meta_id 
     961         */ 
     962        public function test_get_orderby_meta_id() { 
     963                $g1 = $this->factory->group->create(); 
     964                $g2 = $this->factory->group->create(); 
     965                $g3 = $this->factory->group->create(); 
     966 
     967                groups_update_groupmeta( $g2, 'orderup', 'sammy' ); 
     968                groups_update_groupmeta( $g1, 'orderup', 'sammy' ); 
     969 
     970                $args = array( 
     971                        'meta_query'         => array( 
     972                                array( 
     973                                        'key'   => 'orderup', 
     974                                        'value' => 'sammy' 
     975                                ), 
     976                        ), 
     977                        'orderby'           => 'meta_id', 
     978                        'order'             => 'ASC', 
     979                ); 
     980                $groups = BP_Groups_Group::get( $args ); 
     981 
     982                $found = wp_list_pluck( $groups['groups'], 'id' ); 
     983                $this->assertEquals( array( $g2, $g1 ), $found ); 
     984        } 
     985 
     986        /** 
     987         * @group groups_get_orderby_meta_id 
     988         */ 
     989        public function test_get_orderby_meta_id_invalid_fallback_to_date_created() { 
     990                $time = time(); 
     991                $g1 = $this->factory->group->create( array( 
     992                        'date_created' => gmdate( 'Y-m-d H:i:s', $time - 10000 ), 
     993                ) ); 
     994                $g2 = $this->factory->group->create( array( 
     995                        'date_created' => gmdate( 'Y-m-d H:i:s', $time - 1000 ), 
     996                ) ); 
     997                $g3 = $this->factory->group->create( array( 
     998                        'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100 ), 
     999                ) ); 
     1000 
     1001                $args = array( 
     1002                        'orderby'           => 'meta_id', 
     1003                ); 
     1004                $groups = BP_Groups_Group::get( $args ); 
     1005 
     1006                // Orderby meta_id should be ignored if no meta query is present. 
     1007                $found = wp_list_pluck( $groups['groups'], 'id' ); 
     1008                $this->assertEquals( array( $g3, $g2, $g1 ), $found ); 
     1009        } 
     1010 
    9591011        public function test_filter_user_groups_normal_search() { 
    9601012                $g1 = $this->factory->group->create( array( 
    9611013                        'name' => 'Cool Group', 
  • tests/phpunit/testcases/groups/functions.php

    diff --git a/tests/phpunit/testcases/groups/functions.php b/tests/phpunit/testcases/groups/functions.php
    index 4a4c8ba..e08ea7c 100644
    a b Bar!'; 
    711711 
    712712                $this->assertEquals( $g1, $group->id ); 
    713713        } 
     714 
     715        /** 
     716         * @expectedDeprecated groups_edit_base_group_details 
     717         * @group groups_edit_base_group_details 
     718         */ 
     719        public function test_groups_edit_base_group_details_test_backcompat_arguments() { 
     720                $g1 = $this->factory->group->create(); 
     721                $name = 'Great Scott'; 
     722                $description = 'A must-see in time for the holidays!'; 
     723                groups_edit_base_group_details( $g1, $name, $description, false ); 
     724 
     725                $expected = array( 
     726                        'id'          => $g1, 
     727                        'name'        => $name, 
     728                        'description' => $description 
     729                ); 
     730                $updated_group_object = groups_get_group( $g1 ); 
     731                $updated = array( 
     732                        'id'          => $updated_group_object->id, 
     733                        'name'        => $updated_group_object->name, 
     734                        'description' => $updated_group_object->description 
     735                ); 
     736 
     737                $this->assertEqualSets( $expected, $updated ); 
     738        } 
     739 
     740        /** 
     741         * @group groups_edit_base_group_details 
     742         */ 
     743        public function test_groups_edit_base_group_details_test_new_arguments() { 
     744                $g1 = $this->factory->group->create(); 
     745                $name = 'Great Scott'; 
     746                $slug = 'what-about-it'; 
     747                $description = 'A must-see in time for the holidays!'; 
     748                groups_edit_base_group_details( array( 
     749                                'group_id'       => $g1, 
     750                                'name'           => $name, 
     751                                'slug'           => $slug, 
     752                                'description'    => $description, 
     753                                'notify_members' => false, 
     754                ) ); 
     755 
     756                $expected = array( 
     757                        'id'          => $g1, 
     758                        'slug'        => $slug, 
     759                        'name'        => $name, 
     760                        'description' => $description 
     761                ); 
     762                $updated_group_object = groups_get_group( $g1 ); 
     763                $updated = array( 
     764                        'id'          => $updated_group_object->id, 
     765                        'slug'        => $updated_group_object->slug, 
     766                        'name'        => $updated_group_object->name, 
     767                        'description' => $updated_group_object->description 
     768                ); 
     769 
     770                $this->assertEqualSets( $expected, $updated ); 
     771        } 
     772 
     773        /** 
     774         * @group groups_edit_base_group_details 
     775         */ 
     776        public function test_groups_edit_base_group_details_avoid_slug_collisions() { 
     777                $slug = 'circe'; 
     778                $g1 = $this->factory->group->create( array( 'slug' => $slug ) ); 
     779                $g2 = $this->factory->group->create( array( 'slug' => 'loom' ) ); 
     780 
     781                // Attempt to use a duplicate slug. 
     782                groups_edit_base_group_details( array( 
     783                                'group_id'       => $g2, 
     784                                'slug'           => $slug, 
     785                ) ); 
     786 
     787                $updated_group_object = groups_get_group( $g2 ); 
     788 
     789                $this->assertNotEquals( $slug, $updated_group_object->slug ); 
     790        } 
     791 
     792        /** 
     793         * @group groups_edit_base_group_details 
     794         */ 
     795        public function test_groups_edit_base_group_details_slug_no_change() { 
     796                $slug = 'circe'; 
     797                $g1 = $this->factory->group->create( array( 'slug' => $slug ) ); 
     798 
     799                // Make sure the slug doesn't get incremented when there's no change. 
     800                groups_edit_base_group_details( array( 
     801                                'group_id'       => $g1, 
     802                                'slug'           => $slug, 
     803                ) ); 
     804 
     805                $updated_group_object = groups_get_group( $g1 ); 
     806 
     807                $this->assertEquals( $slug, $updated_group_object->slug ); 
     808        } 
     809 
     810        /** 
     811         * @group groups_edit_base_group_details 
     812         */ 
     813        public function test_groups_edit_base_group_details_slug_null_value() { 
     814                $slug = 'circe'; 
     815                $g1 = $this->factory->group->create( array( 'slug' => $slug ) ); 
     816 
     817                // Make sure the slug doesn't get changed when null is passed. 
     818                groups_edit_base_group_details( array( 
     819                                'group_id'       => $g1, 
     820                                'slug'           => null, 
     821                ) ); 
     822 
     823                $updated_group_object = groups_get_group( $g1 ); 
     824 
     825                $this->assertEquals( $slug, $updated_group_object->slug ); 
     826        } 
     827 
     828        /** 
     829         * @group groups_get_id_by_previous_slug 
     830         */ 
     831        public function test_groups_get_id_by_previous_slug() { 
     832                $slug = 'circe'; 
     833                $g1 = $this->factory->group->create( array( 'slug' => $slug ) ); 
     834                $g2 = $this->factory->group->create( array( 'slug' => 'loom' ) ); 
     835 
     836                groups_edit_base_group_details( array( 
     837                        'group_id'       => $g1, 
     838                        'slug'           => 'newslug', 
     839                ) ); 
     840 
     841                // Function should return the group ID as an integer. 
     842                $this->assertSame( $g1, groups_get_id_by_previous_slug( $slug ) ); 
     843        } 
     844 
     845        /** 
     846         * @group groups_get_id_by_previous_slug 
     847         */ 
     848        public function test_groups_get_id_by_previous_slug_null_no_results() { 
     849                $this->assertNull( groups_get_id_by_previous_slug( 'woohoo' ) ); 
     850        } 
     851 
    714852} 
  • tests/phpunit/testcases/routing/groups.php

    diff --git a/tests/phpunit/testcases/routing/groups.php b/tests/phpunit/testcases/routing/groups.php
    index f4cbb5f..b89c39f 100644
    a b class BP_Tests_Routing_Groups extends BP_UnitTestCase { 
    6363                $this->go_to( bp_get_members_directory_permalink() . 'type/foo/' ); 
    6464                $this->assertTrue( is_404() ); 
    6565        } 
     66 
     67        /** 
     68         * @group group_previous_slug 
     69         */ 
     70        public function test_group_previous_slug_current_slug_should_resolve() { 
     71                $g1 = $this->factory->group->create( array( 
     72                        'slug' => 'george', 
     73                ) ); 
     74                groups_edit_base_group_details( array( 
     75                        'group_id' => $g1, 
     76                        'slug'     => 'ralph', 
     77                ) ); 
     78 
     79                $this->go_to( bp_get_groups_directory_permalink() . 'ralph' ); 
     80 
     81                $this->assertEquals( $g1, bp_get_current_group_id() ); 
     82        } 
     83 
     84        /** 
     85         * @group group_previous_slug 
     86         */ 
     87        public function test_group_previous_slug_should_resolve() { 
     88                $g1 = $this->factory->group->create( array( 
     89                        'slug' => 'george', 
     90                ) ); 
     91 
     92                groups_edit_base_group_details( array( 
     93                        'group_id'       => $g1, 
     94                        'slug'           => 'sam!', 
     95                        'notify_members' => false, 
     96                ) ); 
     97                $this->go_to( bp_get_groups_directory_permalink() . 'george' ); 
     98 
     99                $this->assertEquals( $g1, bp_get_current_group_id() ); 
     100        } 
     101 
     102        /** 
     103         * @group group_previous_slug 
     104         */ 
     105        public function test_group_previous_slug_most_recent_takes_precedence() { 
     106                $g1 = $this->factory->group->create( array( 
     107                        'slug' => 'george', 
     108                ) ); 
     109                groups_edit_base_group_details( array( 
     110                        'group_id'       => $g1, 
     111                        'slug'           => 'ralph', 
     112                        'notify_members' => false, 
     113                ) ); 
     114                $g2 = $this->factory->group->create( array( 
     115                        'slug' => 'george', 
     116                ) ); 
     117                groups_edit_base_group_details( array( 
     118                        'group_id'       => $g2, 
     119                        'slug'           => 'sam', 
     120                        'notify_members' => false, 
     121                ) ); 
     122 
     123                $this->go_to( bp_get_groups_directory_permalink() . 'george' ); 
     124                $this->assertEquals( $g2, bp_get_current_group_id() ); 
     125        } 
     126 
    66127}