WordPress.org

Make WordPress Core

Ticket #37641: 37641.diff

File 37641.diff, 4.8 KB (added by flixos90, 3 years ago)
  • src/wp-includes/class-wp-user-query.php

     
    117117                        'has_published_posts' => null,
    118118                );
    119119
     120                if ( is_multisite() ) {
     121                        $defaults['spam'] = null;
     122                        $defaults['deleted'] = null;
     123                }
     124
    120125                return wp_parse_args( $args, $defaults );
    121126        }
    122127
     
    131136         * @since 4.4.0 Added 'paged', 'role__in', and 'role__not_in' parameters. The 'role' parameter was updated to
    132137         *              permit an array or comma-separated list of values. The 'number' parameter was updated to support
    133138         *              querying for all users with using -1.
     139         * @since 4.7.0 Added 'spam' and 'deleted' parameters for multisite setups.
    134140         *
    135141         * @access public
    136142         *
     
    195201         *     @type bool|array   $has_published_posts Pass an array of post types to filter results to users who have
    196202         *                                             published posts in those post types. `true` is an alias for all
    197203         *                                             public post types.
     204         *     @type int          $spam                Limit results to spam users. Only available on multisite. Accepts
     205         *                                             '1' or '0'. Default empty.
     206         *     @type int          $deleted             Limit results to deleted users. Only available on multisite. Accepts
     207         *                                             '1' or '0'. Default empty.
    198208         * }
    199209         */
    200210        public function prepare_query( $query = array() ) {
     
    511521                        $this->query_where .= $date_query->get_sql();
    512522                }
    513523
     524                // On multisite two additional column values may be queried.
     525                if ( is_multisite() ) {
     526                        if ( is_numeric( $qv['spam'] ) ) {
     527                                $spam = absint( $qv['spam'] );
     528                                $this->query_where .= $wpdb->prepare( " AND $wpdb->users.spam = %d", $spam );
     529                        }
     530
     531                        if ( is_numeric( $qv['deleted'] ) ) {
     532                                $deleted = absint( $qv['deleted'] );
     533                                $this->query_where .= $wpdb->prepare( " AND $wpdb->users.deleted = %d", $deleted );
     534                        }
     535                }
     536
    514537                /**
    515538                 * Fires after the WP_User_Query has been parsed, and before
    516539                 * the query is executed.
  • tests/phpunit/tests/user/query.php

     
    12291229                $this->assertSame( $r1, $r2 );
    12301230                $this->assertSame( $r1, $r3 );
    12311231        }
     1232
     1233        /**
     1234         * @ticket 37641
     1235         */
     1236        public function test_get_users_spam() {
     1237                if ( ! is_multisite() ) {
     1238                        $this->markTestSkipped( __METHOD__ . ' requires multisite.' );
     1239                }
     1240
     1241                $not_spam_users = self::$author_ids;
     1242                $spam_user = array_shift( $not_spam_users );
     1243
     1244                update_user_status( $spam_user, 'spam', '1' );
     1245
     1246                $q = new WP_User_Query( array(
     1247                        'fields' => '',
     1248                        'include' => self::$author_ids,
     1249                        'spam' => '1',
     1250                ) );
     1251                $ids = $q->get_results();
     1252
     1253                $this->assertEqualSets( array( $spam_user ), $ids );
     1254
     1255                update_user_status( $spam_user, 'spam', '0' );
     1256        }
     1257
     1258        /**
     1259         * @ticket 37641
     1260         */
     1261        public function test_get_users_not_spam() {
     1262                if ( ! is_multisite() ) {
     1263                        $this->markTestSkipped( __METHOD__ . ' requires multisite.' );
     1264                }
     1265
     1266                $not_spam_users = self::$author_ids;
     1267                $spam_user = array_shift( $not_spam_users );
     1268
     1269                update_user_status( $spam_user, 'spam', '1' );
     1270
     1271                $q = new WP_User_Query( array(
     1272                        'fields' => '',
     1273                        'include' => self::$author_ids,
     1274                        'spam' => '0',
     1275                ) );
     1276                $ids = $q->get_results();
     1277
     1278                $this->assertEqualSets( $not_spam_users, $ids );
     1279
     1280                update_user_status( $spam_user, 'spam', '0' );
     1281        }
     1282
     1283        /**
     1284         * @ticket 37641
     1285         */
     1286        public function test_get_users_deleted() {
     1287                if ( ! is_multisite() ) {
     1288                        $this->markTestSkipped( __METHOD__ . ' requires multisite.' );
     1289                }
     1290
     1291                $not_deleted_users = self::$author_ids;
     1292                $deleted_user = array_shift( $not_deleted_users );
     1293
     1294                update_user_status( $deleted_user, 'deleted', '1' );
     1295
     1296                $q = new WP_User_Query( array(
     1297                        'fields' => '',
     1298                        'include' => self::$author_ids,
     1299                        'deleted' => '1',
     1300                ) );
     1301                $ids = $q->get_results();
     1302
     1303                $this->assertEqualSets( array( $deleted_user ), $ids );
     1304
     1305                update_user_status( $deleted_user, 'deleted', '0' );
     1306        }
     1307
     1308        /**
     1309         * @ticket 37641
     1310         */
     1311        public function test_get_users_not_deleted() {
     1312                if ( ! is_multisite() ) {
     1313                        $this->markTestSkipped( __METHOD__ . ' requires multisite.' );
     1314                }
     1315
     1316                $not_deleted_users = self::$author_ids;
     1317                $deleted_user = array_shift( $not_deleted_users );
     1318
     1319                update_user_status( $deleted_user, 'deleted', '1' );
     1320
     1321                $q = new WP_User_Query( array(
     1322                        'fields' => '',
     1323                        'include' => self::$author_ids,
     1324                        'deleted' => '0',
     1325                ) );
     1326                $ids = $q->get_results();
     1327
     1328                $this->assertEqualSets( $not_deleted_users, $ids );
     1329
     1330                update_user_status( $deleted_user, 'deleted', '0' );
     1331        }
    12321332}