Skip to:
Content

Ticket #6014: 6014.02.diff

File 6014.02.diff, 27.7 KB (added by dcavins, 15 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}