WordPress.org

Make WordPress Core

Ticket #47509: 47509.5.diff

File 47509.5.diff, 6.2 KB (added by garrett-eclipse, 5 months ago)

Minor refresh to rename the filter wp_privacy_additional_user_profile_data to match the group this is paired with

  • src/wp-includes/user.php

     
    30043004                }
    30053005        }
    30063006
     3007        // Get the list of reserved names.
     3008        $reserved_names = array_values( $user_prop_to_export );
     3009
     3010        /**
     3011         * Filter to extend the Users profile data for the privacy exporter.
     3012         *
     3013         * @since 5.4.0
     3014         *
     3015         * @param array    $additional_user_profile_data {
     3016         *     An array of name-value pairs of additional user data items.  Default: the empty array.
     3017         *
     3018         *     @type string $name  The user-facing name of an item name-value pair, e.g. 'IP Address'.
     3019         *     @type string $value The user-facing value of an item data pair, e.g. '50.60.70.0'.
     3020         * }
     3021         * @param WP_User  $user           The user whose data is being exported.
     3022         * @param array    $reserved_names An array of reserved names.  Any item in
     3023         *                                 `$additional_user_data` that uses one of these
     3024         *                                 for it's `name` will not be included in the export.
     3025         */
     3026        $_extra_data = apply_filters( 'wp_privacy_additional_user_profile_data', array(), $user, $reserved_names );
     3027
     3028        if ( is_array( $_extra_data ) && ! empty( $_extra_data ) ) {
     3029                // Remove items that use reserved names.
     3030                $extra_data  = array_filter(
     3031                        $_extra_data,
     3032                        function( $item ) use ( $reserved_names ) {
     3033                                return ! in_array( $item['name'], $reserved_names );
     3034                        }
     3035                );
     3036
     3037                if ( count( $extra_data ) !== count( $_extra_data ) ) {
     3038                        _doing_it_wrong(
     3039                                __FUNCTION__,
     3040                                sprintf(
     3041                                        /* translators: %s: wp_privacy_additional_user_profile_data */
     3042                                        __( 'Filter %s returned items with reserved names.' ),
     3043                                        '<code>wp_privacy_additional_user_profile_data</code>'
     3044                                ),
     3045                                '5.4.0'
     3046                        );
     3047                }
     3048
     3049                if ( ! empty( $extra_data ) ) {
     3050                        $user_data_to_export = array_merge( $user_data_to_export, $extra_data );
     3051                }
     3052        }
     3053
    30073054        $data_to_export[] = array(
    30083055                'group_id'          => 'user',
    30093056                'group_label'       => __( 'User' ),
  • tests/phpunit/tests/user.php

     
    16851685                // Number of exported user properties.
    16861686                $this->assertSame( 11, count( $actual['data'][0]['data'] ) );
    16871687        }
     1688
     1689        /**
     1690         * Testing the `wp_privacy_additional_user_profile_data` filter works.
     1691         *
     1692         * @since 5.4.0
     1693         *
     1694         * @ticket 47509
     1695         */
     1696        function test_filter_wp_privacy_additional_user_profile_data() {
     1697                $test_user = new WP_User( self::$contrib_id );
     1698
     1699                add_filter( 'wp_privacy_additional_user_profile_data', array( $this, 'export_additional_user_profile_data' ) );
     1700
     1701                $actual = wp_user_personal_data_exporter( $test_user->user_email );
     1702
     1703                remove_filter( 'wp_privacy_additional_user_profile_data', array( $this, 'export_additional_user_profile_data' ) );
     1704
     1705                $this->assertTrue( $actual['done'] );
     1706
     1707                // Number of exported users.
     1708                $this->assertSame( 1, count( $actual['data'] ) );
     1709
     1710                // Number of exported user properties (the 11 core properties,
     1711                // plus 1 additional from the filter).
     1712                $this->assertSame( 12, count( $actual['data'][0]['data'] ) );
     1713
     1714                // Check that the item added by the filter was retained.
     1715                $this->assertSame(
     1716                        1,
     1717                        count(
     1718                                wp_list_filter(
     1719                                        $actual['data'][0]['data'],
     1720                                        array(
     1721                                                'name'  => 'Test Additional Data Name',
     1722                                                'value' => 'Test Additional Data Value'
     1723                                        )
     1724                                )
     1725                        )
     1726                );
     1727
     1728                // _doing_wrong() should be called because the filter callback
     1729                // adds a item with a 'name' that is the same as one generated by core.
     1730                $this->setExpectedIncorrectUsage( 'wp_user_personal_data_exporter' );
     1731                add_filter( 'wp_privacy_additional_user_profile_data', array( $this, 'export_additional_user_profile_data_with_dup_name' ) );
     1732
     1733                $actual = wp_user_personal_data_exporter( $test_user->user_email );
     1734
     1735                remove_filter( 'wp_privacy_additional_user_profile_data', array( $this, 'export_additional_user_profile_data' ) );
     1736
     1737                $this->assertTrue( $actual['done'] );
     1738
     1739                // Number of exported users.
     1740                $this->assertSame( 1, count( $actual['data'] ) );
     1741
     1742                // Number of exported user properties (the 11 core properties,
     1743                // plus 1 additional from the filter).
     1744                $this->assertSame( 12, count( $actual['data'][0]['data'] ) );
     1745
     1746                // Check that the duplicate 'name' => 'User ID' was stripped.
     1747                $this->assertSame(
     1748                        1,
     1749                        count(
     1750                                wp_list_filter(
     1751                                        $actual['data'][0]['data'],
     1752                                        array(
     1753                                                'name'  => 'User ID',
     1754                                        )
     1755                                )
     1756                        )
     1757                );
     1758
     1759                // Check that the item added by the filter was retained.
     1760                $this->assertSame(
     1761                        1,
     1762                        count(
     1763                                wp_list_filter(
     1764                                        $actual['data'][0]['data'],
     1765                                        array(
     1766                                                'name'  => 'Test Additional Data Name',
     1767                                                'value' => 'Test Additional Data Value'
     1768                                        )
     1769                                )
     1770                        )
     1771                );
     1772        }
     1773
     1774        /**
     1775         * Filter callback to add additional profile data to the User Group on Export Requests.
     1776         *
     1777         * @since 5.4.0
     1778         *
     1779         * @ticket 47509
     1780         *
     1781         * @return array $additional_profile_data The additional User data.
     1782         */
     1783        public function export_additional_user_profile_data() {
     1784                $additional_profile_data = array(
     1785                        // This item should be retained and included in the export.
     1786                        array(
     1787                                'name'  => 'Test Additional Data Name',
     1788                                'value' => 'Test Additional Data Value',
     1789                        ),
     1790                );
     1791
     1792                return $additional_profile_data;
     1793        }
     1794
     1795        /**
     1796         * Filter callback to add additional profile data to the User Group on Export Requests.
     1797         *
     1798         * This callback should generate a `_doing_it_wrong()`.
     1799         *
     1800         * @since 5.4.0
     1801         *
     1802         * @ticket 47509
     1803         *
     1804         * @return array $additional_profile_data The additional User data.
     1805         */
     1806        public function export_additional_user_profile_data_with_dup_name() {
     1807                $additional_profile_data = array(
     1808                        // This item should be stripped out by wp_user_personal_data_exporter()
     1809                        // because it's 'name' duplicates one exported by core.
     1810                        array(
     1811                                'name'  => 'User ID',
     1812                                'value' => 'Some User ID',
     1813                        ),
     1814                        // This item should be retained and included in the export.
     1815                        array(
     1816                                'name'  => 'Test Additional Data Name',
     1817                                'value' => 'Test Additional Data Value',
     1818                        ),
     1819                );
     1820
     1821                return $additional_profile_data;
     1822        }
    16881823}