Plugin Directory

Changeset 3210022 for performance-lab


Ignore:
Timestamp:
12/18/2024 06:22:38 PM (15 months ago)
Author:
performanceteam
Message:

Update to version 3.7.0 from GitHub

Location:
performance-lab
Files:
2 added
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • performance-lab/tags/3.7.0/includes/admin/load.php

    r3191547 r3210022  
    215215
    216216/**
     217 * Gets the path to a script or stylesheet.
     218 *
     219 * @since 3.7.0
     220 *
     221 * @param string      $src_path Source path.
     222 * @param string|null $min_path Minified path. If not supplied, then '.min' is injected before the file extension in the source path.
     223 * @return string URL to script or stylesheet.
     224 */
     225function perflab_get_asset_path( string $src_path, ?string $min_path = null ): string {
     226    if ( null === $min_path ) {
     227        // Note: wp_scripts_get_suffix() is not used here because we need access to both the source and minified paths.
     228        $min_path = (string) preg_replace( '/(?=\.\w+$)/', '.min', $src_path );
     229    }
     230
     231    $force_src = false;
     232    if ( WP_DEBUG && ! file_exists( trailingslashit( PERFLAB_PLUGIN_DIR_PATH ) . $min_path ) ) {
     233        $force_src = true;
     234        wp_trigger_error(
     235            __FUNCTION__,
     236            sprintf(
     237                /* translators: %s is the minified asset path */
     238                __( 'Minified asset has not been built: %s', 'performance-lab' ),
     239                $min_path
     240            ),
     241            E_USER_WARNING
     242        );
     243    }
     244
     245    if ( SCRIPT_DEBUG || $force_src ) {
     246        return $src_path;
     247    }
     248
     249    return $min_path;
     250}
     251
     252/**
    217253 * Callback function to handle admin scripts.
    218254 *
     
    229265    wp_enqueue_script(
    230266        'perflab-plugin-activate-ajax',
    231         plugin_dir_url( PERFLAB_MAIN_FILE ) . 'includes/admin/plugin-activate-ajax.js',
     267        plugin_dir_url( PERFLAB_MAIN_FILE ) . perflab_get_asset_path( 'includes/admin/plugin-activate-ajax.js' ),
    232268        array( 'wp-i18n', 'wp-a11y', 'wp-api-fetch' ),
    233269        PERFLAB_VERSION,
  • performance-lab/tags/3.7.0/includes/admin/plugins.php

    r3191547 r3210022  
    1717 *
    1818 * @param string $plugin_slug The string identifier for the plugin in questions slug.
    19  * @return array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], download_link: string, version: string}|WP_Error Array of plugin data or WP_Error if failed.
     19 * @return array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], version: string}|WP_Error Array of plugin data or WP_Error if failed.
    2020 */
    2121function perflab_query_plugin_info( string $plugin_slug ) {
     
    2323    $plugins       = get_transient( $transient_key );
    2424
    25     if ( is_array( $plugins ) ) {
    26         // If the specific plugin_slug is not in the cache, return an error.
    27         if ( ! isset( $plugins[ $plugin_slug ] ) ) {
     25    if ( is_array( $plugins ) && isset( $plugins[ $plugin_slug ] ) ) {
     26        if ( isset( $plugins[ $plugin_slug ]['error'] ) ) {
     27            // Plugin was requested before but an error occurred for it.
    2828            return new WP_Error(
    29                 'plugin_not_found',
    30                 __( 'Plugin not found in cached API response.', 'performance-lab' )
     29                $plugins[ $plugin_slug ]['error']['code'],
     30                $plugins[ $plugin_slug ]['error']['message']
    3131            );
    3232        }
     
    4141        'requires_php',
    4242        'requires_plugins',
    43         'download_link',
    4443        'version', // Needed by install_plugin_install_status().
    4544    );
     
    5655    );
    5756
     57    $has_errors = false;
     58    $plugins    = array();
     59
    5860    if ( is_wp_error( $response ) ) {
     61        $plugins[ $plugin_slug ] = array(
     62            'error' => array(
     63                'code'    => 'api_error',
     64                'message' => sprintf(
     65                    /* translators: %s: API error message */
     66                    __( 'Failed to retrieve plugins data from WordPress.org API: %s', 'performance-lab' ),
     67                    $response->get_error_message()
     68                ),
     69            ),
     70        );
     71
     72        foreach ( perflab_get_standalone_plugins() as $standalone_plugin ) {
     73            $plugins[ $standalone_plugin ] = $plugins[ $plugin_slug ];
     74        }
     75
     76        $has_errors = true;
     77    } elseif ( ! is_object( $response ) || ! property_exists( $response, 'plugins' ) ) {
     78        $plugins[ $plugin_slug ] = array(
     79            'error' => array(
     80                'code'    => 'no_plugins',
     81                'message' => __( 'No plugins found in the API response.', 'performance-lab' ),
     82            ),
     83        );
     84
     85        foreach ( perflab_get_standalone_plugins() as $standalone_plugin ) {
     86            $plugins[ $standalone_plugin ] = $plugins[ $plugin_slug ];
     87        }
     88
     89        $has_errors = true;
     90    } else {
     91        $plugin_queue = perflab_get_standalone_plugins();
     92
     93        // Index the plugins from the API response by their slug for efficient lookup.
     94        $all_performance_plugins = array_column( $response->plugins, null, 'slug' );
     95
     96        // Start processing the plugins using a queue-based approach.
     97        while ( count( $plugin_queue ) > 0 ) { // phpcs:ignore Squiz.PHP.DisallowSizeFunctionsInLoops.Found
     98            $current_plugin_slug = array_shift( $plugin_queue );
     99
     100            // Skip already-processed plugins.
     101            if ( isset( $plugins[ $current_plugin_slug ] ) ) {
     102                continue;
     103            }
     104
     105            if ( ! isset( $all_performance_plugins[ $current_plugin_slug ] ) ) {
     106                // Cache the fact that the plugin was not found.
     107                $plugins[ $current_plugin_slug ] = array(
     108                    'error' => array(
     109                        'code'    => 'plugin_not_found',
     110                        'message' => __( 'Plugin not found in API response.', 'performance-lab' ),
     111                    ),
     112                );
     113
     114                $has_errors = true;
     115            } else {
     116                $plugin_data                     = $all_performance_plugins[ $current_plugin_slug ];
     117                $plugins[ $current_plugin_slug ] = wp_array_slice_assoc( $plugin_data, $fields );
     118
     119                // Enqueue the required plugins slug by adding it to the queue.
     120                if ( isset( $plugin_data['requires_plugins'] ) && is_array( $plugin_data['requires_plugins'] ) ) {
     121                    $plugin_queue = array_merge( $plugin_queue, $plugin_data['requires_plugins'] );
     122                }
     123            }
     124        }
     125
     126        if ( ! isset( $plugins[ $plugin_slug ] ) ) {
     127            // Cache the fact that the plugin was not found.
     128            $plugins[ $plugin_slug ] = array(
     129                'error' => array(
     130                    'code'    => 'plugin_not_found',
     131                    'message' => __( 'The requested plugin is not part of Performance Lab plugins.', 'performance-lab' ),
     132                ),
     133            );
     134
     135            $has_errors = true;
     136        }
     137    }
     138
     139    set_transient( $transient_key, $plugins, $has_errors ? MINUTE_IN_SECONDS : HOUR_IN_SECONDS );
     140
     141    if ( isset( $plugins[ $plugin_slug ]['error'] ) ) {
    59142        return new WP_Error(
    60             'api_error',
    61             sprintf(
    62                 /* translators: %s: API error message */
    63                 __( 'Failed to retrieve plugins data from WordPress.org API: %s', 'performance-lab' ),
    64                 $response->get_error_message()
    65             )
    66         );
    67     }
    68 
    69     // Check if the response contains plugins.
    70     if ( ! ( is_object( $response ) && property_exists( $response, 'plugins' ) ) ) {
    71         return new WP_Error( 'no_plugins', __( 'No plugins found in the API response.', 'performance-lab' ) );
    72     }
    73 
    74     $plugins            = array();
    75     $standalone_plugins = array_merge(
    76         array_flip( perflab_get_standalone_plugins() ),
    77         array( 'optimization-detective' => array() ) // TODO: Programmatically discover the plugin dependencies and add them here. See <https://github.com/WordPress/performance/issues/1616>.
    78     );
    79     foreach ( $response->plugins as $plugin_data ) {
    80         if ( ! isset( $standalone_plugins[ $plugin_data['slug'] ] ) ) {
    81             continue;
    82         }
    83         $plugins[ $plugin_data['slug'] ] = wp_array_slice_assoc( $plugin_data, $fields );
    84     }
    85 
    86     set_transient( $transient_key, $plugins, HOUR_IN_SECONDS );
    87 
    88     if ( ! isset( $plugins[ $plugin_slug ] ) ) {
    89         return new WP_Error(
    90             'plugin_not_found',
    91             __( 'Plugin not found in API response.', 'performance-lab' )
     143            $plugins[ $plugin_slug ]['error']['code'],
     144            $plugins[ $plugin_slug ]['error']['message']
    92145        );
    93146    }
     
    96149     * Validated (mostly) plugin data.
    97150     *
    98      * @var array<string, array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], download_link: string, version: string}> $plugins
     151     * @var array<string, array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], version: string}> $plugins
    99152     */
    100153    return $plugins[ $plugin_slug ];
     
    240293    </div>
    241294    <?php
     295    if ( current_user_can( 'activate_plugins' ) ) {
     296        ?>
     297        <p>
     298            <?php
     299            $plugins_url = add_query_arg(
     300                array(
     301                    's'             => 'WordPress Performance Team',
     302                    'plugin_status' => 'all',
     303                ),
     304                admin_url( 'plugins.php' )
     305            );
     306            echo wp_kses(
     307                sprintf(
     308                    /* translators: %s is the URL to the plugins screen */
     309                    __( 'Performance features are installed as plugins. To update features or remove them, <a href="%s">manage them on the plugins screen</a>.', 'performance-lab' ),
     310                    esc_url( $plugins_url )
     311                ),
     312                array(
     313                    'a' => array( 'href' => true ),
     314                )
     315            );
     316            ?>
     317        </p>
     318        <?php
     319    }
    242320}
    243321
     
    326404    $processed_plugins[] = $plugin_slug;
    327405
    328     $plugin_data = perflab_query_plugin_info( $plugin_slug );
     406    // Get the freshest data (including the most recent download_link) as opposed what is cached by perflab_query_plugin_info().
     407    $plugin_data = plugins_api(
     408        'plugin_information',
     409        array(
     410            'slug'   => $plugin_slug,
     411            'fields' => array(
     412                'download_link'    => true,
     413                'requires_plugins' => true,
     414                'sections'         => false, // Omit the bulk of the response which we don't need.
     415            ),
     416        )
     417    );
     418
    329419    if ( $plugin_data instanceof WP_Error ) {
    330420        return $plugin_data;
     421    }
     422
     423    if ( is_object( $plugin_data ) ) {
     424        $plugin_data = (array) $plugin_data;
    331425    }
    332426
  • performance-lab/tags/3.7.0/load.php

    r3193397 r3210022  
    44 * Plugin URI: https://github.com/WordPress/performance
    55 * Description: Performance plugin from the WordPress Performance Team, which is a collection of standalone performance features.
    6  * Requires at least: 6.5
     6 * Requires at least: 6.6
    77 * Requires PHP: 7.2
    8  * Version: 3.6.1
     8 * Version: 3.7.0
    99 * Author: WordPress Performance Team
    1010 * Author URI: https://make.wordpress.org/performance/
     
    2020}
    2121
    22 define( 'PERFLAB_VERSION', '3.6.1' );
     22define( 'PERFLAB_VERSION', '3.7.0' );
    2323define( 'PERFLAB_MAIN_FILE', __FILE__ );
    2424define( 'PERFLAB_PLUGIN_DIR_PATH', plugin_dir_path( PERFLAB_MAIN_FILE ) );
  • performance-lab/tags/3.7.0/readme.txt

    r3193397 r3210022  
    33Contributors: wordpressdotorg
    44Tested up to: 6.7
    5 Stable tag:   3.6.1
     5Stable tag:   3.7.0
    66License:      GPLv2 or later
    77License URI:  https://www.gnu.org/licenses/gpl-2.0.html
     
    7171
    7272== Changelog ==
     73
     74= 3.7.0 =
     75
     76**Enhancements**
     77
     78* Add guidance for managing Performance feature plugins. ([1734](https://github.com/WordPress/performance/pull/1734))
     79* Automatically discover plugin dependencies when obtaining Performance feature plugins from WordPress.org. ([1680](https://github.com/WordPress/performance/pull/1680))
     80* Disregard transient cache in `perflab_query_plugin_info()` when a plugin is absent. ([1694](https://github.com/WordPress/performance/pull/1694))
     81* Minify script used for ajax activation of features; warn if absent and serve original file when SCRIPT_DEBUG is enabled. ([1658](https://github.com/WordPress/performance/pull/1658))
     82
     83**Bug Fixes**
     84
     85* Fix latest plugin version not being downloaded consistently. ([1693](https://github.com/WordPress/performance/pull/1693))
    7386
    7487= 3.6.1 =
  • performance-lab/trunk/includes/admin/load.php

    r3191547 r3210022  
    215215
    216216/**
     217 * Gets the path to a script or stylesheet.
     218 *
     219 * @since 3.7.0
     220 *
     221 * @param string      $src_path Source path.
     222 * @param string|null $min_path Minified path. If not supplied, then '.min' is injected before the file extension in the source path.
     223 * @return string URL to script or stylesheet.
     224 */
     225function perflab_get_asset_path( string $src_path, ?string $min_path = null ): string {
     226    if ( null === $min_path ) {
     227        // Note: wp_scripts_get_suffix() is not used here because we need access to both the source and minified paths.
     228        $min_path = (string) preg_replace( '/(?=\.\w+$)/', '.min', $src_path );
     229    }
     230
     231    $force_src = false;
     232    if ( WP_DEBUG && ! file_exists( trailingslashit( PERFLAB_PLUGIN_DIR_PATH ) . $min_path ) ) {
     233        $force_src = true;
     234        wp_trigger_error(
     235            __FUNCTION__,
     236            sprintf(
     237                /* translators: %s is the minified asset path */
     238                __( 'Minified asset has not been built: %s', 'performance-lab' ),
     239                $min_path
     240            ),
     241            E_USER_WARNING
     242        );
     243    }
     244
     245    if ( SCRIPT_DEBUG || $force_src ) {
     246        return $src_path;
     247    }
     248
     249    return $min_path;
     250}
     251
     252/**
    217253 * Callback function to handle admin scripts.
    218254 *
     
    229265    wp_enqueue_script(
    230266        'perflab-plugin-activate-ajax',
    231         plugin_dir_url( PERFLAB_MAIN_FILE ) . 'includes/admin/plugin-activate-ajax.js',
     267        plugin_dir_url( PERFLAB_MAIN_FILE ) . perflab_get_asset_path( 'includes/admin/plugin-activate-ajax.js' ),
    232268        array( 'wp-i18n', 'wp-a11y', 'wp-api-fetch' ),
    233269        PERFLAB_VERSION,
  • performance-lab/trunk/includes/admin/plugins.php

    r3191547 r3210022  
    1717 *
    1818 * @param string $plugin_slug The string identifier for the plugin in questions slug.
    19  * @return array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], download_link: string, version: string}|WP_Error Array of plugin data or WP_Error if failed.
     19 * @return array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], version: string}|WP_Error Array of plugin data or WP_Error if failed.
    2020 */
    2121function perflab_query_plugin_info( string $plugin_slug ) {
     
    2323    $plugins       = get_transient( $transient_key );
    2424
    25     if ( is_array( $plugins ) ) {
    26         // If the specific plugin_slug is not in the cache, return an error.
    27         if ( ! isset( $plugins[ $plugin_slug ] ) ) {
     25    if ( is_array( $plugins ) && isset( $plugins[ $plugin_slug ] ) ) {
     26        if ( isset( $plugins[ $plugin_slug ]['error'] ) ) {
     27            // Plugin was requested before but an error occurred for it.
    2828            return new WP_Error(
    29                 'plugin_not_found',
    30                 __( 'Plugin not found in cached API response.', 'performance-lab' )
     29                $plugins[ $plugin_slug ]['error']['code'],
     30                $plugins[ $plugin_slug ]['error']['message']
    3131            );
    3232        }
     
    4141        'requires_php',
    4242        'requires_plugins',
    43         'download_link',
    4443        'version', // Needed by install_plugin_install_status().
    4544    );
     
    5655    );
    5756
     57    $has_errors = false;
     58    $plugins    = array();
     59
    5860    if ( is_wp_error( $response ) ) {
     61        $plugins[ $plugin_slug ] = array(
     62            'error' => array(
     63                'code'    => 'api_error',
     64                'message' => sprintf(
     65                    /* translators: %s: API error message */
     66                    __( 'Failed to retrieve plugins data from WordPress.org API: %s', 'performance-lab' ),
     67                    $response->get_error_message()
     68                ),
     69            ),
     70        );
     71
     72        foreach ( perflab_get_standalone_plugins() as $standalone_plugin ) {
     73            $plugins[ $standalone_plugin ] = $plugins[ $plugin_slug ];
     74        }
     75
     76        $has_errors = true;
     77    } elseif ( ! is_object( $response ) || ! property_exists( $response, 'plugins' ) ) {
     78        $plugins[ $plugin_slug ] = array(
     79            'error' => array(
     80                'code'    => 'no_plugins',
     81                'message' => __( 'No plugins found in the API response.', 'performance-lab' ),
     82            ),
     83        );
     84
     85        foreach ( perflab_get_standalone_plugins() as $standalone_plugin ) {
     86            $plugins[ $standalone_plugin ] = $plugins[ $plugin_slug ];
     87        }
     88
     89        $has_errors = true;
     90    } else {
     91        $plugin_queue = perflab_get_standalone_plugins();
     92
     93        // Index the plugins from the API response by their slug for efficient lookup.
     94        $all_performance_plugins = array_column( $response->plugins, null, 'slug' );
     95
     96        // Start processing the plugins using a queue-based approach.
     97        while ( count( $plugin_queue ) > 0 ) { // phpcs:ignore Squiz.PHP.DisallowSizeFunctionsInLoops.Found
     98            $current_plugin_slug = array_shift( $plugin_queue );
     99
     100            // Skip already-processed plugins.
     101            if ( isset( $plugins[ $current_plugin_slug ] ) ) {
     102                continue;
     103            }
     104
     105            if ( ! isset( $all_performance_plugins[ $current_plugin_slug ] ) ) {
     106                // Cache the fact that the plugin was not found.
     107                $plugins[ $current_plugin_slug ] = array(
     108                    'error' => array(
     109                        'code'    => 'plugin_not_found',
     110                        'message' => __( 'Plugin not found in API response.', 'performance-lab' ),
     111                    ),
     112                );
     113
     114                $has_errors = true;
     115            } else {
     116                $plugin_data                     = $all_performance_plugins[ $current_plugin_slug ];
     117                $plugins[ $current_plugin_slug ] = wp_array_slice_assoc( $plugin_data, $fields );
     118
     119                // Enqueue the required plugins slug by adding it to the queue.
     120                if ( isset( $plugin_data['requires_plugins'] ) && is_array( $plugin_data['requires_plugins'] ) ) {
     121                    $plugin_queue = array_merge( $plugin_queue, $plugin_data['requires_plugins'] );
     122                }
     123            }
     124        }
     125
     126        if ( ! isset( $plugins[ $plugin_slug ] ) ) {
     127            // Cache the fact that the plugin was not found.
     128            $plugins[ $plugin_slug ] = array(
     129                'error' => array(
     130                    'code'    => 'plugin_not_found',
     131                    'message' => __( 'The requested plugin is not part of Performance Lab plugins.', 'performance-lab' ),
     132                ),
     133            );
     134
     135            $has_errors = true;
     136        }
     137    }
     138
     139    set_transient( $transient_key, $plugins, $has_errors ? MINUTE_IN_SECONDS : HOUR_IN_SECONDS );
     140
     141    if ( isset( $plugins[ $plugin_slug ]['error'] ) ) {
    59142        return new WP_Error(
    60             'api_error',
    61             sprintf(
    62                 /* translators: %s: API error message */
    63                 __( 'Failed to retrieve plugins data from WordPress.org API: %s', 'performance-lab' ),
    64                 $response->get_error_message()
    65             )
    66         );
    67     }
    68 
    69     // Check if the response contains plugins.
    70     if ( ! ( is_object( $response ) && property_exists( $response, 'plugins' ) ) ) {
    71         return new WP_Error( 'no_plugins', __( 'No plugins found in the API response.', 'performance-lab' ) );
    72     }
    73 
    74     $plugins            = array();
    75     $standalone_plugins = array_merge(
    76         array_flip( perflab_get_standalone_plugins() ),
    77         array( 'optimization-detective' => array() ) // TODO: Programmatically discover the plugin dependencies and add them here. See <https://github.com/WordPress/performance/issues/1616>.
    78     );
    79     foreach ( $response->plugins as $plugin_data ) {
    80         if ( ! isset( $standalone_plugins[ $plugin_data['slug'] ] ) ) {
    81             continue;
    82         }
    83         $plugins[ $plugin_data['slug'] ] = wp_array_slice_assoc( $plugin_data, $fields );
    84     }
    85 
    86     set_transient( $transient_key, $plugins, HOUR_IN_SECONDS );
    87 
    88     if ( ! isset( $plugins[ $plugin_slug ] ) ) {
    89         return new WP_Error(
    90             'plugin_not_found',
    91             __( 'Plugin not found in API response.', 'performance-lab' )
     143            $plugins[ $plugin_slug ]['error']['code'],
     144            $plugins[ $plugin_slug ]['error']['message']
    92145        );
    93146    }
     
    96149     * Validated (mostly) plugin data.
    97150     *
    98      * @var array<string, array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], download_link: string, version: string}> $plugins
     151     * @var array<string, array{name: string, slug: string, short_description: string, requires: string|false, requires_php: string|false, requires_plugins: string[], version: string}> $plugins
    99152     */
    100153    return $plugins[ $plugin_slug ];
     
    240293    </div>
    241294    <?php
     295    if ( current_user_can( 'activate_plugins' ) ) {
     296        ?>
     297        <p>
     298            <?php
     299            $plugins_url = add_query_arg(
     300                array(
     301                    's'             => 'WordPress Performance Team',
     302                    'plugin_status' => 'all',
     303                ),
     304                admin_url( 'plugins.php' )
     305            );
     306            echo wp_kses(
     307                sprintf(
     308                    /* translators: %s is the URL to the plugins screen */
     309                    __( 'Performance features are installed as plugins. To update features or remove them, <a href="%s">manage them on the plugins screen</a>.', 'performance-lab' ),
     310                    esc_url( $plugins_url )
     311                ),
     312                array(
     313                    'a' => array( 'href' => true ),
     314                )
     315            );
     316            ?>
     317        </p>
     318        <?php
     319    }
    242320}
    243321
     
    326404    $processed_plugins[] = $plugin_slug;
    327405
    328     $plugin_data = perflab_query_plugin_info( $plugin_slug );
     406    // Get the freshest data (including the most recent download_link) as opposed what is cached by perflab_query_plugin_info().
     407    $plugin_data = plugins_api(
     408        'plugin_information',
     409        array(
     410            'slug'   => $plugin_slug,
     411            'fields' => array(
     412                'download_link'    => true,
     413                'requires_plugins' => true,
     414                'sections'         => false, // Omit the bulk of the response which we don't need.
     415            ),
     416        )
     417    );
     418
    329419    if ( $plugin_data instanceof WP_Error ) {
    330420        return $plugin_data;
     421    }
     422
     423    if ( is_object( $plugin_data ) ) {
     424        $plugin_data = (array) $plugin_data;
    331425    }
    332426
  • performance-lab/trunk/load.php

    r3193397 r3210022  
    44 * Plugin URI: https://github.com/WordPress/performance
    55 * Description: Performance plugin from the WordPress Performance Team, which is a collection of standalone performance features.
    6  * Requires at least: 6.5
     6 * Requires at least: 6.6
    77 * Requires PHP: 7.2
    8  * Version: 3.6.1
     8 * Version: 3.7.0
    99 * Author: WordPress Performance Team
    1010 * Author URI: https://make.wordpress.org/performance/
     
    2020}
    2121
    22 define( 'PERFLAB_VERSION', '3.6.1' );
     22define( 'PERFLAB_VERSION', '3.7.0' );
    2323define( 'PERFLAB_MAIN_FILE', __FILE__ );
    2424define( 'PERFLAB_PLUGIN_DIR_PATH', plugin_dir_path( PERFLAB_MAIN_FILE ) );
  • performance-lab/trunk/readme.txt

    r3193397 r3210022  
    33Contributors: wordpressdotorg
    44Tested up to: 6.7
    5 Stable tag:   3.6.1
     5Stable tag:   3.7.0
    66License:      GPLv2 or later
    77License URI:  https://www.gnu.org/licenses/gpl-2.0.html
     
    7171
    7272== Changelog ==
     73
     74= 3.7.0 =
     75
     76**Enhancements**
     77
     78* Add guidance for managing Performance feature plugins. ([1734](https://github.com/WordPress/performance/pull/1734))
     79* Automatically discover plugin dependencies when obtaining Performance feature plugins from WordPress.org. ([1680](https://github.com/WordPress/performance/pull/1680))
     80* Disregard transient cache in `perflab_query_plugin_info()` when a plugin is absent. ([1694](https://github.com/WordPress/performance/pull/1694))
     81* Minify script used for ajax activation of features; warn if absent and serve original file when SCRIPT_DEBUG is enabled. ([1658](https://github.com/WordPress/performance/pull/1658))
     82
     83**Bug Fixes**
     84
     85* Fix latest plugin version not being downloaded consistently. ([1693](https://github.com/WordPress/performance/pull/1693))
    7386
    7487= 3.6.1 =
Note: See TracChangeset for help on using the changeset viewer.