updated plugin `Jetpack Protect` version 1.0.4

This commit is contained in:
KawaiiPunk 2022-09-02 15:19:40 +00:00 committed by Gitium
parent ba0955a33f
commit 1ecbe8cf47
99 changed files with 8263 additions and 935 deletions

View File

@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 1.0.4 - 2022-08-29
### Fixed
- Fixed NaN error that prevented the pricing interstitial from rendering.
## 1.0.3 - 2022-08-26
### Added
- Added a default 'See all results' label to the mobile navigation button.
- Added a spinner to the in progress scan page in admin
- Added JITM functionality
- Added threat descriptions.
- My Jetpack includes JITMs
### Changed
- Add condition to check plugin activation context before redirecting
### Fixed
- Fixed alignment of long navigation item labels on mobile screen sizes.
## 1.0.2 - 2022-07-27
### Changed
- Updated package dependencies.

View File

@ -1 +1 @@
<?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => '208c449e7f7a4cdf587d');
<?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => 'c28c9ff5fed1d1b9867f');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -10,10 +10,10 @@
"automattic/jetpack-autoloader": "^2.11",
"automattic/jetpack-composer-plugin": "^1.1",
"automattic/jetpack-config": "^1.9",
"automattic/jetpack-identity-crisis": "^0.8.18",
"automattic/jetpack-my-jetpack": "^1.8",
"automattic/jetpack-plugins-installer": "^0.1.4",
"automattic/jetpack-sync": "^1.37"
"automattic/jetpack-identity-crisis": "^0.8.22",
"automattic/jetpack-my-jetpack": "^2.0",
"automattic/jetpack-plugins-installer": "^0.2.0",
"automattic/jetpack-sync": "^1.38"
},
"require-dev": {
"yoast/phpunit-polyfills": "1.0.3",
@ -64,6 +64,6 @@
"automattic/jetpack-autoloader": true,
"automattic/jetpack-composer-plugin": true
},
"autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2"
"autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4"
}
}

View File

@ -4,7 +4,7 @@
* Plugin Name: Jetpack Protect
* Plugin URI: https://wordpress.org/plugins/jetpack-protect
* Description: Security tools that keep your site safe and sound, from posts to plugins.
* Version: 1.0.2
* Version: 1.0.4
* Author: Automattic
* Author URI: https://jetpack.com/
* License: GPLv2 or later
@ -33,7 +33,7 @@ if ( ! defined( 'ABSPATH' ) ) {
exit;
}
define( 'JETPACK_PROTECT_VERSION', '1.0.2' );
define( 'JETPACK_PROTECT_VERSION', '1.0.4' );
define( 'JETPACK_PROTECT_DIR', plugin_dir_path( __FILE__ ) );
define( 'JETPACK_PROTECT_ROOT_FILE', __FILE__ );
define( 'JETPACK_PROTECT_ROOT_FILE_RELATIVE_PATH', plugin_basename( __FILE__ ) );
@ -97,7 +97,10 @@ add_action( 'activated_plugin', 'jetpack_protect_plugin_activation' );
* @param string $plugin Path to the plugin file relative to the plugins directory.
*/
function jetpack_protect_plugin_activation( $plugin ) {
if ( JETPACK_PROTECT_ROOT_FILE_RELATIVE_PATH === $plugin ) {
if (
JETPACK_PROTECT_ROOT_FILE_RELATIVE_PATH === $plugin &&
\Automattic\Jetpack\Plugins_Installer::is_current_request_activating_plugin_from_plugins_screen( JETPACK_PROTECT_ROOT_FILE_RELATIVE_PATH )
) {
wp_safe_redirect( esc_url( admin_url( 'admin.php?page=jetpack-protect' ) ) );
exit;
}

View File

@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.17.21] - 2022-08-25
### Changed
- Updated package dependencies. [#25814]
## [1.17.20] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
@ -256,6 +260,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Statically access asset tools
[1.17.21]: https://github.com/Automattic/jetpack-assets/compare/v1.17.20...v1.17.21
[1.17.20]: https://github.com/Automattic/jetpack-assets/compare/v1.17.19...v1.17.20
[1.17.19]: https://github.com/Automattic/jetpack-assets/compare/v1.17.18...v1.17.19
[1.17.18]: https://github.com/Automattic/jetpack-assets/compare/v1.17.17...v1.17.18

View File

@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.9.6] - 2022-08-26
### Changed
- Call ensure_options_$feature methods before the initialization
## [1.9.5] - 2022-08-23
### Changed
- Initialize VideoPress admin UI from the package [#25692]
## [1.9.4] - 2022-08-09
### Changed
- Initialize VideoPress package from the Config pkg [#25385]
## [1.9.3] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
@ -132,6 +144,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Trying to add deterministic initialization.
[1.9.6]: https://github.com/Automattic/jetpack-config/compare/v1.9.5...v1.9.6
[1.9.5]: https://github.com/Automattic/jetpack-config/compare/v1.9.4...v1.9.5
[1.9.4]: https://github.com/Automattic/jetpack-config/compare/v1.9.3...v1.9.4
[1.9.3]: https://github.com/Automattic/jetpack-config/compare/v1.9.2...v1.9.3
[1.9.2]: https://github.com/Automattic/jetpack-config/compare/v1.9.1...v1.9.2
[1.9.1]: https://github.com/Automattic/jetpack-config/compare/v1.9.0...v1.9.1

View File

@ -20,6 +20,7 @@ use Automattic\Jetpack\Post_List\Post_List as Post_List;
use Automattic\Jetpack\Publicize\Publicize_Setup as Publicize_Setup;
use Automattic\Jetpack\Search\Initializer as Jetpack_Search_Main;
use Automattic\Jetpack\Sync\Main as Sync_Main;
use Automattic\Jetpack\VideoPress\Initializer as VideoPress_Pkg_Initializer;
use Automattic\Jetpack\Waf\Waf_Initializer as Jetpack_Waf_Main;
use Automattic\Jetpack\WordAds\Initializer as Jetpack_WordAds_Main;
@ -47,6 +48,7 @@ class Config {
'publicize' => false,
'wordads' => false,
'waf' => false,
'videopress' => false,
);
/**
@ -72,6 +74,8 @@ class Config {
* the package to their composer project. Declaring a requirement using this method
* instructs the class to initialize it.
*
* Run the options method (if exists) every time the method is called.
*
* @param String $feature the feature slug.
* @param array $options Additional options, optional.
*/
@ -79,6 +83,11 @@ class Config {
$this->config[ $feature ] = true;
$this->set_feature_options( $feature, $options );
$method_options = 'ensure_options_' . $feature;
if ( method_exists( $this, $method_options ) ) {
$this->{ $method_options }();
}
}
/**
@ -133,6 +142,10 @@ class Config {
$this->ensure_class( 'Automattic\Jetpack\Waf\Waf_Initializer' )
&& $this->ensure_feature( 'waf' );
}
if ( $this->config['videopress'] ) {
$this->ensure_class( 'Automattic\Jetpack\VideoPress\Initializer' ) && $this->ensure_feature( 'videopress' );
}
}
/**
@ -166,7 +179,6 @@ class Config {
/**
* Ensures a feature is enabled, sets it up if it hasn't already been set up.
* Run the options method (if exists) every time the method is called.
*
* @param String $feature slug of the feature.
* @return Integer either FEATURE_ENSURED, FEATURE_ALREADY_ENSURED or FEATURE_NOT_AVAILABLE constants.
@ -177,11 +189,6 @@ class Config {
return self::FEATURE_NOT_AVAILABLE;
}
$method_options = 'ensure_options_' . $feature;
if ( method_exists( $this, $method_options ) ) {
$this->{ $method_options }();
}
if ( did_action( 'jetpack_feature_' . $feature . '_enabled' ) ) {
return self::FEATURE_ALREADY_ENSURED;
}
@ -278,6 +285,25 @@ class Config {
return true;
}
/**
* Enables VideoPress.
*/
protected function enable_videopress() {
VideoPress_Pkg_Initializer::init();
return true;
}
/**
* Handles VideoPress options
*/
protected function ensure_options_videopress() {
$options = $this->get_feature_options( 'videopress' );
if ( ! empty( $options ) ) {
VideoPress_Pkg_Initializer::update_init_options( $options );
}
return true;
}
/**
* Setup the Connection options.
*/

View File

@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.44.0] - 2022-08-29
### Added
- Connection: verify REST API errors.
## [1.43.1] - 2022-08-25
### Changed
- Updated package dependencies. [#25814]
## [1.43.0] - 2022-08-23
### Added
- Added verified errors to the React initial state. [#25628]
### Fixed
- Improved docs. [#25703]
## [1.42.0] - 2022-08-03
### Changed
- Refactoring to remove usage of deprecated methods and method arguments. [#25315]
### Deprecated
- Removed deprecated method calls [#25300]
## [1.41.8] - 2022-07-29
- Updated package dependencies
## [1.41.7] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
@ -652,6 +678,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Separate the connection library into its own package.
[1.44.0]: https://github.com/Automattic/jetpack-connection/compare/v1.43.1...v1.44.0
[1.43.1]: https://github.com/Automattic/jetpack-connection/compare/v1.43.0...v1.43.1
[1.43.0]: https://github.com/Automattic/jetpack-connection/compare/v1.42.0...v1.43.0
[1.42.0]: https://github.com/Automattic/jetpack-connection/compare/v1.41.8...v1.42.0
[1.41.8]: https://github.com/Automattic/jetpack-connection/compare/v1.41.7...v1.41.8
[1.41.7]: https://github.com/Automattic/jetpack-connection/compare/v1.41.6...v1.41.7
[1.41.6]: https://github.com/Automattic/jetpack-connection/compare/v1.41.5...v1.41.6
[1.41.5]: https://github.com/Automattic/jetpack-connection/compare/v1.41.4...v1.41.5

View File

@ -55,7 +55,7 @@
"link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.41.x-dev"
"dev-trunk": "1.44.x-dev"
}
},
"config": {

View File

@ -126,7 +126,9 @@ class Jetpack_Options {
'has_seen_wc_connection_modal', // (bool) Whether the site has displayed the WooCommerce Connection modal
'partner_coupon', // (string) A Jetpack partner issued coupon to promote a sale together with Jetpack.
'partner_coupon_added', // (string) A date for when `partner_coupon` was added, so we can auto-purge after a certain time interval.
'dismissed_backup_review_request', // (bool) Determines if the plugin review request is dismissed.
'dismissed_backup_review_restore', // (bool) Determines if the component review request is dismissed for successful restore requests.
'dismissed_backup_review_time_based', // (bool) Determines if the component review request is dismissed for subscription time based requests.
);
}

View File

@ -41,6 +41,14 @@ class Client {
$response = self::_wp_remote_request( $result['url'], $result['request'] );
Error_Handler::get_instance()->check_api_response_for_errors(
$response,
$result['auth'],
empty( $args['url'] ) ? '' : $args['url'],
empty( $args['method'] ) ? 'POST' : $args['method'],
'rest'
);
/**
* Fired when the remote request response has been received.
*
@ -63,6 +71,7 @@ class Client {
*
* @type String $url The request URL.
* @type array $request Request arguments.
* @type array $auth Authorization data.
* }
*/
public static function build_signed_request( $args, $body = null ) {
@ -205,7 +214,7 @@ class Client {
$url = add_query_arg( 'signature', rawurlencode( $signature ), $url );
}
return compact( 'url', 'request' );
return compact( 'url', 'request', 'auth' );
}
/**

View File

@ -197,17 +197,18 @@ class Error_Handler {
/**
* Keep track of a connection error that was encountered
*
* @since 1.14.2
* @param \WP_Error $error The error object.
* @param boolean $force Force the report, even if should_report_error is false.
* @param boolean $skip_wpcom_verification Set to 'true' to verify the error locally and skip the WP.com verification.
*
* @param \WP_Error $error the error object.
* @param boolean $force Force the report, even if should_report_error is false.
* @return void
* @since 1.14.2
*/
public function report_error( \WP_Error $error, $force = false ) {
public function report_error( \WP_Error $error, $force = false, $skip_wpcom_verification = false ) {
if ( in_array( $error->get_error_code(), $this->known_errors, true ) && $this->should_report_error( $error ) || $force ) {
$stored_error = $this->store_error( $error );
if ( $stored_error ) {
$this->send_error_to_wpcom( $stored_error );
$skip_wpcom_verification ? $this->verify_error( $stored_error ) : $this->send_error_to_wpcom( $stored_error );
}
}
}
@ -223,15 +224,14 @@ class Error_Handler {
* @return boolean $should_report True if gate is open and the error should be reported.
*/
public function should_report_error( \WP_Error $error ) {
if ( defined( 'JETPACK_DEV_DEBUG' ) && JETPACK_DEV_DEBUG ) {
return true;
}
/**
* Whether to bypass the gate for XML-RPC error handling
* Whether to bypass the gate for the error handling
*
* By default, we only process XML-RPC errors once an hour for each error code.
* By default, we only process errors once an hour for each error code.
* This is done to avoid overflows. If you need to disable this gate, you can set this variable to true.
*
* This filter is useful for unit testing
@ -307,21 +307,22 @@ class Error_Handler {
return false;
}
$data = $data['signature_details'];
$signature_details = $data['signature_details'];
if ( ! isset( $data['token'] ) || empty( $data['token'] ) ) {
if ( ! isset( $signature_details['token'] ) || empty( $signature_details['token'] ) ) {
return false;
}
$user_id = $this->get_user_id_from_token( $data['token'] );
$user_id = $this->get_user_id_from_token( $signature_details['token'] );
$error_array = array(
'error_code' => $error->get_error_code(),
'user_id' => $user_id,
'error_message' => $error->get_error_message(),
'error_data' => $data,
'error_data' => $signature_details,
'timestamp' => time(),
'nonce' => wp_generate_password( 10, false ),
'error_type' => empty( $data['error_type'] ) ? '' : $data['error_type'],
);
return $error_array;
@ -387,7 +388,7 @@ class Error_Handler {
*
* @since 1.14.2
*
* @param string $token the token used to make the xml-rpc request.
* @param string $token the token used to make the request.
* @return string $the user id or `invalid` if user id not present.
*/
public function get_user_id_from_token( $token ) {
@ -603,7 +604,6 @@ class Error_Handler {
* @return boolean
*/
public function verify_xml_rpc_error( \WP_REST_Request $request ) {
$error = $this->get_error_by_nonce( $request['nonce'] );
if ( $error ) {
@ -634,7 +634,7 @@ class Error_Handler {
}
/**
* Filters the message to be displayed in the admin notices area when there's a xmlrpc error.
* Filters the message to be displayed in the admin notices area when there's a connection error.
*
* By default we don't display any errors.
*
@ -679,7 +679,7 @@ class Error_Handler {
*/
public function jetpack_react_dashboard_error( $errors ) {
$errors[] = array(
'code' => 'xmlrpc_error',
'code' => 'connection_error',
'message' => __( 'Your connection with WordPress.com seems to be broken. If you\'re experiencing issues, please try reconnecting.', 'jetpack-connection' ),
'action' => 'reconnect',
'data' => array( 'api_error_code' => $this->error_code ),
@ -687,4 +687,50 @@ class Error_Handler {
return $errors;
}
/**
* Check REST API response for errors, and report them to WP.com if needed.
*
* @see wp_remote_request() For more information on the $http_response array format.
* @param array|\WP_Error $http_response The response or WP_Error on failure.
* @param array $auth_data Auth data, allowed keys: `token`, `timestamp`, `nonce`, `body-hash`.
* @param string $url Request URL.
* @param string $method Request method.
* @param string $error_type The source of an error: 'xmlrpc' or 'rest'.
*
* @return void
*/
public function check_api_response_for_errors( $http_response, $auth_data, $url, $method, $error_type ) {
if ( 200 === wp_remote_retrieve_response_code( $http_response ) || ! is_array( $auth_data ) || ! $url || ! $method ) {
return;
}
$body_raw = wp_remote_retrieve_body( $http_response );
if ( ! $body_raw ) {
return;
}
$body = json_decode( $body_raw, true );
if ( empty( $body['error'] ) ) {
return;
}
$error = new \WP_Error(
$body['error'],
empty( $body['message'] ) ? '' : $body['message'],
array(
'signature_details' => array(
'token' => empty( $auth_data['token'] ) ? '' : $auth_data['token'],
'timestamp' => empty( $auth_data['timestamp'] ) ? '' : $auth_data['timestamp'],
'nonce' => empty( $auth_data['nonce'] ) ? '' : $auth_data['nonce'],
'body_hash' => empty( $auth_data['body_hash'] ) ? '' : $auth_data['body_hash'],
'method' => $method,
'url' => $url,
),
'error_type' => in_array( $error_type, array( 'xmlrpc', 'rest' ), true ) ? $error_type : '',
)
);
$this->report_error( $error, false, true );
}
}

View File

@ -30,14 +30,15 @@ class Initial_State {
global $wp_version;
return array(
'apiRoot' => esc_url_raw( rest_url() ),
'apiNonce' => wp_create_nonce( 'wp_rest' ),
'registrationNonce' => wp_create_nonce( 'jetpack-registration-nonce' ),
'connectionStatus' => REST_Connector::connection_status( false ),
'userConnectionData' => REST_Connector::get_user_connection_data( false ),
'connectedPlugins' => REST_Connector::get_connection_plugins( false ),
'wpVersion' => $wp_version,
'siteSuffix' => ( new Status() )->get_site_suffix(),
'apiRoot' => esc_url_raw( rest_url() ),
'apiNonce' => wp_create_nonce( 'wp_rest' ),
'registrationNonce' => wp_create_nonce( 'jetpack-registration-nonce' ),
'connectionStatus' => REST_Connector::connection_status( false ),
'userConnectionData' => REST_Connector::get_user_connection_data( false ),
'connectedPlugins' => REST_Connector::get_connection_plugins( false ),
'wpVersion' => $wp_version,
'siteSuffix' => ( new Status() )->get_site_suffix(),
'connectionVerifiedErrors' => Error_Handler::get_instance()->get_verified_errors(),
);
}

View File

@ -363,6 +363,8 @@ class Manager {
'signature' => isset( $_GET['signature'] ) ? wp_unslash( $_GET['signature'] ) : '',
);
$error_type = 'xmlrpc';
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
@list( $token_key, $version, $user_id ) = explode( ':', wp_unslash( $_GET['token'] ) );
// phpcs:enable WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
@ -373,7 +375,7 @@ class Manager {
empty( $token_key )
||
empty( $version ) || (string) $jetpack_api_version !== $version ) {
return new \WP_Error( 'malformed_token', 'Malformed token in request', compact( 'signature_details' ) );
return new \WP_Error( 'malformed_token', 'Malformed token in request', compact( 'signature_details', 'error_type' ) );
}
if ( '0' === $user_id ) {
@ -385,7 +387,7 @@ class Manager {
return new \WP_Error(
'malformed_user_id',
'Malformed user_id in request',
compact( 'signature_details' )
compact( 'signature_details', 'error_type' )
);
}
$user_id = (int) $user_id;
@ -395,20 +397,20 @@ class Manager {
return new \WP_Error(
'unknown_user',
sprintf( 'User %d does not exist', $user_id ),
compact( 'signature_details' )
compact( 'signature_details', 'error_type' )
);
}
}
$token = $this->get_tokens()->get_access_token( $user_id, $token_key, false );
if ( is_wp_error( $token ) ) {
$token->add_data( compact( 'signature_details' ) );
$token->add_data( compact( 'signature_details', 'error_type' ) );
return $token;
} elseif ( ! $token ) {
return new \WP_Error(
'unknown_token',
sprintf( 'Token %s:%s:%d does not exist', $token_key, $version, $user_id ),
compact( 'signature_details' )
compact( 'signature_details', 'error_type' )
);
}
@ -450,7 +452,7 @@ class Manager {
return new \WP_Error(
'could_not_sign',
'Unknown signature error',
compact( 'signature_details' )
compact( 'signature_details', 'error_type' )
);
} elseif ( is_wp_error( $signature ) ) {
return $signature;
@ -466,7 +468,7 @@ class Manager {
return new \WP_Error(
'invalid_nonce',
'Could not add nonce',
compact( 'signature_details' )
compact( 'signature_details', 'error_type' )
);
}
@ -480,7 +482,7 @@ class Manager {
return new \WP_Error(
'signature_mismatch',
'Signature mismatch',
compact( 'signature_details' )
compact( 'signature_details', 'error_type' )
);
}
@ -1846,7 +1848,7 @@ class Manager {
'scope' => $signed_role,
'user_email' => $user->user_email,
'user_login' => $user->user_login,
'is_active' => $this->is_active(), // TODO Deprecate this.
'is_active' => $this->has_connected_owner(), // TODO Deprecate this.
'jp_version' => Constants::get_constant( 'JETPACK__VERSION' ),
'auth_type' => $auth_type,
'secret' => $secrets['secret_1'],
@ -2315,7 +2317,7 @@ class Manager {
* @return array|WP_Error
*/
public function get_connected_plugins() {
$maybe_plugins = Plugin_Storage::get_all( true );
$maybe_plugins = Plugin_Storage::get_all();
if ( $maybe_plugins instanceof WP_Error ) {
return $maybe_plugins;
@ -2351,14 +2353,12 @@ class Manager {
* Whether the plugin is allowed to use the connection, or it's been disconnected by user.
* If no plugin slug was passed into the constructor, always returns true.
*
* @deprecated 1.42.0 This method no longer has a purpose after the removal of the soft disconnect feature.
*
* @return bool
*/
public function is_plugin_enabled() {
if ( ! $this->plugin ) {
return true;
}
return $this->plugin->is_enabled();
return true;
}
/**

View File

@ -12,7 +12,7 @@ namespace Automattic\Jetpack\Connection;
*/
class Package_Version {
const PACKAGE_VERSION = '1.41.7';
const PACKAGE_VERSION = '1.44.0';
const PACKAGE_SLUG = 'connection';

View File

@ -83,7 +83,7 @@ class Plugin {
* @return bool
*/
public function is_only() {
$plugins = Plugin_Storage::get_all( true );
$plugins = Plugin_Storage::get_all();
return ! $plugins || ( array_key_exists( $this->slug, $plugins ) && 1 === count( $plugins ) );
}
@ -113,7 +113,7 @@ class Plugin {
/**
* Whether this plugin is allowed to use the connection.
*
* @deprecated since $next-version$$
* @deprecated since 11.0
* @return bool
*/
public function is_enabled() {

View File

@ -302,7 +302,7 @@ class REST_Connector {
$connection = new Manager();
$connection_status = array(
'isActive' => $connection->is_active(), // TODO deprecate this.
'isActive' => $connection->has_connected_owner(), // TODO deprecate this.
'isStaging' => $status->is_staging_site(),
'isRegistered' => $connection->is_connected(),
'isUserConnected' => $connection->is_user_connected(),

View File

@ -0,0 +1,151 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.4.18] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
## [1.4.17] - 2022-06-21
### Changed
- Renaming master to trunk.
## [1.4.16] - 2022-04-26
### Changed
- Updated package dependencies.
## [1.4.15] - 2022-04-19
### Changed
- PHPCS: Fix `WordPress.Security.ValidatedSanitizedInput`
## [1.4.14] - 2022-03-29
### Changed
- Microperformance: Use === null instead of is_null
## [1.4.13] - 2022-02-09
### Fixed
- Fixed some new PHPCS warnings.
## [1.4.12] - 2022-01-25
### Changed
- Updated package dependencies.
## [1.4.11] - 2022-01-04
### Changed
- Switch to pcov for code coverage.
- Updated package dependencies
## [1.4.10] - 2021-12-14
### Changed
- Updated package dependencies.
## [1.4.9] - 2021-11-16
### Fixed
- Verify $_SERVER['HTTP_USER_AGENT'] exists before use.
## [1.4.8] - 2021-11-02
### Changed
- Set `convertDeprecationsToExceptions` true in PHPUnit config.
- Update PHPUnit configs to include just what needs coverage rather than include everything then try to exclude stuff that doesn't.
## [1.4.7] - 2021-10-19
### Deprecated
- General: remove numerous long-deprecated functions.
## [1.4.6] - 2021-10-13
### Changed
- Updated package dependencies.
## [1.4.5] - 2021-10-12
### Changed
- Updated package dependencies
## [1.4.4] - 2021-09-28
### Changed
- Updated package dependencies.
## [1.4.3] - 2021-08-31
### Changed
- Run composer update on test-php command instead of phpunit.
- Tests: update PHPUnit polyfills dependency (yoast/phpunit-polyfills).
- Updated versions in annotations.
## [1.4.2] - 2021-05-25
### Changed
- Updated package dependencies.
## [1.4.1] - 2021-04-27
### Changed
- Updated package dependencies.
## [1.4.0] - 2021-03-30
### Added
- Added Opera Desktop detection
- Composer alias for dev-master, to improve dependencies
### Changed
- Update package dependencies.
### Fixed
- Use `composer update` rather than `install` in scripts, as composer.lock isn't checked in.
## [1.3.2] - 2021-02-05
- CI: Make tests more generic
## [1.3.1] - 2021-01-19
- Add mirror-repo information to all current composer packages
- Monorepo: Reorganize all projects
## [1.3.0] - 2020-12-09
- Codesniffer: Update mediawiki/mediawiki-codesniffer dependency
- Pin dependencies
- Packages: Update for PHP 8 testing
## [1.2.1] - 2020-11-10
- Improve PHP 8 compatibility
- Updated PHPCS: Packages and Debugger
## [1.2.0] - 2020-10-19
- Replaced intval() with (int) as part of issue #17432.
## [1.1.0] - 2020-08-13
- CI: Try collect js coverage
## 1.0.0 - 2020-06-25
- Moving jetpack_is_mobile into a package
[1.4.18]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.17...v1.4.18
[1.4.17]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.16...v1.4.17
[1.4.16]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.15...v1.4.16
[1.4.15]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.14...v1.4.15
[1.4.14]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.13...v1.4.14
[1.4.13]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.12...v1.4.13
[1.4.12]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.11...v1.4.12
[1.4.11]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.10...v1.4.11
[1.4.10]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.9...v1.4.10
[1.4.9]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.8...v1.4.9
[1.4.8]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.7...v1.4.8
[1.4.7]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.6...v1.4.7
[1.4.6]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.5...v1.4.6
[1.4.5]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.4...v1.4.5
[1.4.4]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.3...v1.4.4
[1.4.3]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.2...v1.4.3
[1.4.2]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.1...v1.4.2
[1.4.1]: https://github.com/Automattic/jetpack-device-detection/compare/v1.4.0...v1.4.1
[1.4.0]: https://github.com/Automattic/jetpack-device-detection/compare/v1.3.2...v1.4.0
[1.3.2]: https://github.com/Automattic/jetpack-device-detection/compare/v1.3.1...v1.3.2
[1.3.1]: https://github.com/Automattic/jetpack-device-detection/compare/v1.3.0...v1.3.1
[1.3.0]: https://github.com/Automattic/jetpack-device-detection/compare/v1.2.1...v1.3.0
[1.2.1]: https://github.com/Automattic/jetpack-device-detection/compare/v1.2.0...v1.2.1
[1.2.0]: https://github.com/Automattic/jetpack-device-detection/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/Automattic/jetpack-device-detection/compare/v1.0.0...v1.1.0

View File

@ -0,0 +1,357 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -0,0 +1,38 @@
# Security Policy
Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/).
## Supported Versions
Generally, only the latest version of Jetpack has continued support. If a critical vulnerability is found in the current version of Jetpack, we may opt to backport any patches to previous versions.
## Reporting a Vulnerability
[Jetpack](https://jetpack.com/) is an open-source plugin for WordPress. Our HackerOne program covers the plugin software, as well as a variety of related projects and infrastructure.
**For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.**
Our most critical targets are:
* Jetpack and the Jetpack composer packages (all within this repo)
* Jetpack.com -- the primary marketing site.
* cloud.jetpack.com -- a management site.
* wordpress.com -- the shared management site for both Jetpack and WordPress.com sites.
For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic).
_Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._
## Guidelines
We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines:
* Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines).
* Pen-testing Production:
* Please **setup a local environment** instead whenever possible. Most of our code is open source (see above).
* If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC.
* **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels.
* To be eligible for a bounty, all of these guidelines must be followed.
* Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability.
We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties.

View File

@ -0,0 +1,39 @@
{
"name": "automattic/jetpack-device-detection",
"description": "A way to detect device types based on User-Agent header.",
"type": "jetpack-library",
"license": "GPL-2.0-or-later",
"require": {},
"require-dev": {
"yoast/phpunit-polyfills": "1.0.3",
"automattic/jetpack-changelogger": "^3.2"
},
"autoload": {
"classmap": [
"src/"
]
},
"scripts": {
"phpunit": [
"./vendor/phpunit/phpunit/phpunit --colors=always"
],
"test-coverage": [
"php -dpcov.directory=. ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\""
],
"test-php": [
"@composer phpunit"
]
},
"minimum-stability": "dev",
"prefer-stable": true,
"extra": {
"autotagger": true,
"mirror-repo": "Automattic/jetpack-device-detection",
"changelogger": {
"link-template": "https://github.com/Automattic/jetpack-device-detection/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.4.x-dev"
}
}
}

View File

@ -0,0 +1,218 @@
<?php
/**
* Device detection for Jetpack.
*
* @package automattic/jetpack-device-detection
*/
namespace Automattic\Jetpack;
require_once __DIR__ . '/functions.php';
use Automattic\Jetpack\Device_Detection\User_Agent_Info;
use function Automattic\Jetpack\Device_Detection\wp_unslash;
/**
* Class Device_Detection
*
* Determine if the current User Agent matches the passed $kind.
*/
class Device_Detection {
/**
* Returns information about the current device accessing the page.
*
* @param string $ua (Optional) User-Agent string.
*
* @return array Device information.
*
* array(
* 'is_phone' => (bool) Whether the current device is a mobile phone.
* 'is_smartphone' => (bool) Whether the current device is a smartphone.
* 'is_tablet' => (bool) Whether the current device is a tablet device.
* 'is_handheld' => (bool) Whether the current device is a handheld device.
* 'is_desktop' => (bool) Whether the current device is a laptop / desktop device.
* 'platform' => (string) Detected platform.
* 'is_phone_matched_ua' => (string) Matched UA.
* );
*/
public static function get_info( $ua = '' ) {
$ua_info = new User_Agent_Info( $ua );
$info = array(
'is_phone' => self::is_mobile( 'any', false, $ua_info ),
'is_phone_matched_ua' => self::is_mobile( 'any', true, $ua_info ),
'is_smartphone' => self::is_mobile( 'smart', false, $ua_info ),
'is_tablet' => $ua_info->is_tablet(),
'platform' => $ua_info->get_platform(),
);
$info['is_handheld'] = $info['is_phone'] || $info['is_tablet'];
$info['is_desktop'] = ! $info['is_handheld'];
if ( function_exists( 'apply_filters' ) ) {
/**
* Filter the value of Device_Detection::get_info.
*
* @since 1.0.0
*
* @param array $info Array of device information.
* @param string $ua User agent string passed to Device_Detection::get_info.
* @param User_Agent_Info $ua_info Instance of Automattic\Jetpack\Device_Detection\User_Agent_Info.
*/
$info = apply_filters( 'jetpack_device_detection_get_info', $info, $ua, $ua_info );
}
return $info;
}
/**
* Detects phone devices.
*
* @param string $ua User-Agent string.
*
* @return bool
*/
public static function is_phone( $ua = '' ) {
$device_info = self::get_info( $ua );
return true === $device_info['is_phone'];
}
/**
* Detects smartphone devices.
*
* @param string $ua User-Agent string.
*
* @return bool
*/
public static function is_smartphone( $ua = '' ) {
$device_info = self::get_info( $ua );
return true === $device_info['is_smartphone'];
}
/**
* Detects tablet devices.
*
* @param string $ua User-Agent string.
*
* @return bool
*/
public static function is_tablet( $ua = '' ) {
$device_info = self::get_info( $ua );
return true === $device_info['is_tablet'];
}
/**
* Detects desktop devices.
*
* @param string $ua User-Agent string.
*
* @return bool
*/
public static function is_desktop( $ua = '' ) {
$device_info = self::get_info( $ua );
return true === $device_info['is_desktop'];
}
/**
* Detects handheld (i.e. phone + tablet) devices.
*
* @param string $ua User-Agent string.
*
* @return bool
*/
public static function is_handheld( $ua = '' ) {
$device_info = self::get_info( $ua );
return true === $device_info['is_handheld'];
}
/**
* Determine if the current User Agent matches the passed $kind.
*
* @param string $kind Category of mobile device to check for. Either: any, dumb, smart.
* @param bool $return_matched_agent Boolean indicating if the UA should be returned.
* @param User_Agent_Info $ua_info Boolean indicating if the UA should be returned.
*
* @return bool|string Boolean indicating if current UA matches $kind. If `$return_matched_agent` is true, returns the UA string.
*/
private static function is_mobile( $kind, $return_matched_agent, $ua_info ) {
$kinds = array(
'smart' => false,
'dumb' => false,
'any' => false,
);
$first_run = true;
$matched_agent = '';
// If an invalid kind is passed in, reset it to default.
if ( ! isset( $kinds[ $kind ] ) ) {
$kind = 'any';
}
if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
return false;
}
$agent = strtolower( filter_var( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) );
if ( strpos( $agent, 'ipad' ) ) {
return false;
}
// Remove Samsung Galaxy tablets (SCH-I800) from being mobile devices.
if ( strpos( $agent, 'sch-i800' ) ) {
return false;
}
if ( $ua_info->is_android_tablet() && false === $ua_info->is_kindle_touch() ) {
return false;
}
if ( $ua_info->is_blackberry_tablet() ) {
return false;
}
if ( $first_run ) {
$first_run = false;
// checks for iPhoneTier devices & RichCSS devices.
if ( $ua_info->isTierIphone() || $ua_info->isTierRichCSS() ) {
$kinds['smart'] = true;
$matched_agent = $ua_info->matched_agent;
}
if ( ! $kinds['smart'] ) {
// if smart, we are not dumb so no need to check.
$dumb_agents = $ua_info->dumb_agents;
foreach ( $dumb_agents as $dumb_agent ) {
if ( false !== strpos( $agent, $dumb_agent ) ) {
$kinds['dumb'] = true;
$matched_agent = $dumb_agent;
break;
}
}
if ( ! $kinds['dumb'] ) {
if ( isset( $_SERVER['HTTP_X_WAP_PROFILE'] ) ) {
$kinds['dumb'] = true;
$matched_agent = 'http_x_wap_profile';
} elseif ( isset( $_SERVER['HTTP_ACCEPT'] ) && ( preg_match( '/wap\.|\.wap/i', $_SERVER['HTTP_ACCEPT'] ) || false !== strpos( strtolower( $_SERVER['HTTP_ACCEPT'] ), 'application/vnd.wap.xhtml+xml' ) ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- This is doing the validating.
$kinds['dumb'] = true;
$matched_agent = 'vnd.wap.xhtml+xml';
}
}
}
if ( $kinds['dumb'] || $kinds['smart'] ) {
$kinds['any'] = true;
}
}
$value = $kinds[ $kind ];
if ( $return_matched_agent ) {
$value = $matched_agent;
}
return $value;
}
}

View File

@ -0,0 +1,27 @@
<?php
/**
* Utility functions for device detection.
*
* @package automattic/jetpack-device-detection
*/
namespace Automattic\Jetpack\Device_Detection;
/**
* A wrapper for WordPress's `wp_unslash()`.
*
* Even though PHP itself dropped the option to add slashes to superglobals a decade ago,
* WordPress still does it through some misguided extreme backwards compatibility. 🙄
*
* If WordPress's function exists, assume it needs to be called. If not, assume it doesn't.
*
* @param string|array $value String or array of data to unslash.
* @return string|array Possibly unslashed $value.
*/
function wp_unslash( $value ) {
if ( function_exists( '\\wp_unslash' ) ) {
return \wp_unslash( $value );
} else {
return $value;
}
}

View File

@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.8.22] - 2022-08-29
### Changed
- Updated package dependencies.
## [0.8.21] - 2022-08-25
### Changed
- Updated package dependencies. [#25814]
## [0.8.20] - 2022-08-23
### Changed
- Updated package dependencies. [#25338, #25339, #25628, #25762]
## [0.8.19] - 2022-08-03
### Changed
- Updated package dependencies. [#25300, #25315]
## [0.8.18] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
@ -248,6 +264,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Updated package dependencies.
- Use Connection/Urls for home_url and site_url functions migrated from Sync.
[0.8.22]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.21...v0.8.22
[0.8.21]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.20...v0.8.21
[0.8.20]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.19...v0.8.20
[0.8.19]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.18...v0.8.19
[0.8.18]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.17...v0.8.18
[0.8.17]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.16...v0.8.17
[0.8.16]: https://github.com/Automattic/jetpack-identity-crisis/compare/v0.8.15...v0.8.16

View File

@ -1 +1 @@
<?php return array('dependencies' => array('react', 'react-dom', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => 'b0c1a72da90ab2ac7196');
<?php return array('dependencies' => array('react', 'react-dom', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => 'ec6be881467d41653072');

View File

@ -4,7 +4,7 @@
"type": "jetpack-library",
"license": "GPL-2.0-or-later",
"require": {
"automattic/jetpack-connection": "^1.41",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-constants": "^1.6",
"automattic/jetpack-status": "^1.14",
"automattic/jetpack-logo": "^1.5",

View File

@ -28,7 +28,7 @@ class Identity_Crisis {
/**
* Package Version
*/
const PACKAGE_VERSION = '0.8.18';
const PACKAGE_VERSION = '0.8.22';
/**
* Instance of the object.

View File

@ -0,0 +1,574 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.2.26] - 2022-08-29
### Changed
- Updated package dependencies.
## [2.2.25] - 2022-08-25
### Changed
- Updated package dependencies. [#25814]
## [2.2.24] - 2022-08-23
### Added
- Add custom styling rules for the JITMs displayed in My Jetpack. [#22452]
- Updated JITM readme. [#25739]
### Changed
- Updated package dependencies. [#25628]
## [2.2.23] - 2022-08-03
### Changed
- Updated package dependencies. [#25300, #25315]
## [2.2.22] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
## [2.2.21] - 2022-07-12
### Changed
- Updated package dependencies.
## [2.2.20] - 2022-06-21
### Changed
- Renaming master to trunk. [#24661]
## [2.2.19] - 2022-06-14
### Changed
- Updated package dependencies. [#24529]
## [2.2.18] - 2022-06-08
### Changed
- Reorder JS imports for `import/order` eslint rule. [#24601]
## [2.2.17] - 2022-05-18
### Changed
- Updated package dependencies [#24372]
## [2.2.16] - 2022-05-10
### Changed
- Updated package dependencies. [#24302]
## [2.2.15] - 2022-05-04
### Changed
- Remove use of `pnpx` in preparation for pnpm 7.0. [#24210]
- Updated package dependencies. [#24095]
### Deprecated
- Moved the options class into Connection. [#24095]
## [2.2.14] - 2022-04-26
### Changed
- Updated package dependencies.
- Update package.json metadata.
## [2.2.13] - 2022-04-19
### Changed
- PHPCS: Fix `WordPress.Security.ValidatedSanitizedInput`
## [2.2.12] - 2022-04-12
### Changed
- Updated package dependencies.
## [2.2.11] - 2022-04-06
### Changed
- Updated package dependencies
### Removed
- Removed tracking dependency.
## [2.2.10] - 2022-03-29
### Changed
- Updated package dependencies.
## [2.2.9] - 2022-03-23
### Changed
- Updated package dependencies.
## [2.2.8] - 2022-03-02
### Changed
- Updated package dependencies
## [2.2.7] - 2022-02-22
### Changed
- Updated package dependencies.
## [2.2.6] - 2022-02-16
### Changed
- Updated package dependencies.
## [2.2.5] - 2022-02-09
### Changed
- Updated package dependencies.
## [2.2.4] - 2022-02-02
### Changed
- Build: remove unneeded files from production build.
- Update use of old jQuery interfaces
## [2.2.3] - 2022-01-25
### Changed
- Updated package dependencies.
## [2.2.2] - 2022-01-18
### Changed
- General: update required node version to v16.13.2
## [2.2.1] - 2022-01-11
### Changed
- Updated package dependencies.
## [2.2.0] - 2022-01-04
### Changed
- Switch to pcov for code coverage.
- Updated package dependencies.
- Updated package textdomain from `jetpack` to `jetpack-jitm`.
## [2.1.1] - 2021-12-14
### Changed
- Updated package dependencies.
## [2.1.0] - 2021-11-30
### Added
- Add proper JS and CSS builder.
- Adds filters to allow sideloading of the Jetpack Backup plugin through JITMs.
- JITM: Added ability to sideload Jetpack Boost plugin.
### Changed
- Add `output.filename` in Webpack config to override changed default.
- Colors: update Jetpack Primary color to match latest brand book.
### Fixed
- JITM: wrap CTA below text on small viewports
## [2.0.8] - 2021-11-23
### Changed
- Updated package dependencies.
## [2.0.7] - 2021-11-16
### Added
- Use monorepo `validate-es` script to validate Webpack builds.
### Changed
- Updated package dependencies.
## [2.0.6] - 2021-11-09
### Changed
- Update webpack build config.
## [2.0.5] - 2021-11-02
### Changed
- Set `convertDeprecationsToExceptions` true in PHPUnit config.
- Update PHPUnit configs to include just what needs coverage rather than include everything then try to exclude stuff that doesn't.
## [2.0.4] - 2021-10-26
### Changed
- Updated package dependencies.
## [2.0.3] - 2021-10-19
### Changed
- Updated package dependencies.
## [2.0.2] - 2021-10-12
### Changed
- Updated package dependencies
## [2.0.1] - 2021-09-28
### Changed
- Allow Node ^14.17.6 to be used in this project. This shouldn't change the behavior of the code itself.
- Updated package dependencies.
## [2.0.0] - 2021-08-31
### Changed
- Run composer update on test-php command instead of phpunit.
- Tests: update PHPUnit polyfills dependency (yoast/phpunit-polyfills).
- Update annotations versions.
- Updated package dependencies.
- Update to latest webpack, webpack-cli and calypso-build.
- Upgrade to Webpack 5.
- Use Node 16.7.0 in tooling.
### Removed
- Removed IE11 support.
## [1.16.2] - 2021-07-27
### Changed
- Updated package dependencies.
## [1.16.1] - 2021-06-29
### Changed
- Update package dependencies.
- Update node version requirement to 14.16.1
- Update the usage of Redirect lib and passes the unlinked param as a query argument.
## [1.16.0] - 2021-05-25
### Added
- JITM: allow the plugin to set the icon for pre-connection JITMs.
- JITM: move sync updated option hook to the JITM package.
### Changed
- JITM: prevent JITMs from being registered more than once.
- JITM: remove jetpack-constants dependency from composer.json
- JITM: set the default values of the jetpack_just_in_time_msgs and jetpack_just_in_time_msg_cache filters to true.
- JITM: Use an action instead of a property to prevent JITMs from being registered multiple times
- JITM: Use the Device_Detection package to determine if the device is mobile.
- Updated package dependencies
- update jetpack-redirect dependency
## [1.15.1] - 2021-05-03
### Changed
- JITM: Use manager::get_authorization_url to obtain the authorization url in the user deletion notice.
## [1.15.0] - 2021-04-27
### Added
- Move JITM's REST API endpoints into the package
### Changed
- Always display pre-connection JITMs, without the need to set a filter.
- Avoid wrapping text in the main CTA button.
- Bump JITM package version requirement.
- JITM: Update CTA redirect url with unlinked query arg to indicate current user is not connected.
- Update package dependencies.
- Use the a8c-mc-stats package to generate stats.
## [1.14.1] - 2021-03-30
### Added
- Composer alias for dev-master, to improve dependencies
### Changed
- Use is_connected instead of is_active to instantiate Pre/Post_Connection_JITM
- Add a jetpack_pre_connection_jitms filter.
- Update colors to match upcoming WP 5.7 color changes
- Update Node to match latest LTS 12
- Update package dependencies.
### Fixed
- Use `composer update` rather than `install` in scripts, as composer.lock isn't checked in.
## [1.14.0] - 2021-02-23
- Recommendations: Hide JITMs when banner is displaying
- Setup Wizard: Remove setup wizard
- JITM: move jetpack-jitm.js to the JITM package
- CI: Make tests more generic
## [1.13.5] - 2021-02-08
- Update dependencies to latest stable
## [1.13.4] - 2021-01-28
- Update dependencies to latest stable
## [1.13.3] - 2021-01-26
- Update dependencies to latest stable
## [1.13.2] - 2021-01-26
- Update dependencies to latest stable
## [1.13.1] - 2021-01-26
- Add mirror-repo information to all current composer packages
- Monorepo: Reorganize all projects
## [1.13.0] - 2021-01-05
- Update dependency brain/monkey to v2.6.0
- Pin dependencies
- Packages: Update for PHP 8 testing
## [1.12.2] - 2020-12-09
- Update dependencies to latest stable
## [1.12.1] - 2020-11-24
- Version packages for release
## [1.12.0] - 2020-11-24
- Status: Introduce get_site_suffix method
- General: update minimum required version to WordPress 5.5
- Updated PHPCS: Packages and Debugger
## [1.11.2] - 2020-11-05
- Update dependencies to latest stable
## [1.11.1] - 2020-10-29
- Update dependencies to latest stable
## [1.11.0] - 2020-10-27
- JITM: add a Pre_Connection_JITM::generate_admin_url method
- JITM: use is_active from the connection package
- JITM: regenerate assets
## [1.10.4] - 2020-10-14
- Update dependencies to latest stable
## [1.10.3] - 2020-10-09
- Update dependencies to latest stable
## [1.10.2] - 2020-10-06
- Update dependencies to latest stable
## [1.10.1] - 2020-10-01
- Update dependencies to latest stable
## [1.10.0] - 2020-09-29
- Update dependencies to latest stable
## [1.9.1] - 2020-09-09
- Update dependencies to latest stable
## [1.9.0] - 2020-08-26
- Compat: add new Creative Mail compat file
- Packages: Update filenames after #16810
- CI: Try collect js coverage
- Docker: Add package testing shortcut
## [1.8.2] - 2020-08-10
- Update dependencies to latest stable
## [1.8.1] - 2020-08-10
- Update dependencies to latest stable
## [1.8.0] - 2020-07-28
- Core Compat: Site Environment
- Core REST API: Add permission callback to delete_jitm_message endpoint
## [1.7.2] - 2020-07-06
- Update dependencies to latest stable
## [1.7.1] - 2020-07-01
- Update dependencies to latest stable
## [1.7.0] - 2020-06-30
- PHPCS: Clean up the packages
- Hide pre-connection JITM on the posts page when few posts are published
- Jetpack Setup Wizard: Do not show pre-connection JITMs to non admins
- JITM: change 'setup' to 'set up' in pre-connection JITMs
- Pre-connection JITMS: Link to connect-in-place flow
- JITM: add Redirect use statement
## [1.6.5] - 2020-06-01
- Hide pre-connection JITM on the posts page when few posts are published
## [1.6.4] - 2020-06-01
- Update dependencies to latest stable
## [1.6.3] - 2020-05-29
- Jetpack Setup Wizard: Do not show pre-connection JITMs to non admins
## [1.6.2] - 2020-05-29
- JITM: change 'setup' to 'set up' in pre-connection JITMs
- Pre-connection JITMS: Link to connect-in-place flow
## [1.6.1] - 2020-05-28
- JITM: add Redirect use statement
## [1.6.0] - 2020-05-26
- JITM: expand docs and tests to account for pre-connection messages
- Improve responsiveness of JITMs
- JITM: fix the use statements
- Implement pre-connection JITMs
- JITM: Allow JITM on stats pages
## [1.5.1] - 2020-04-30
- JITM: Allow JITM on stats pages
## [1.5.0] - 2020-04-28
- Use jp.com redirect in all links
## [1.4.0] - 2020-03-31
- Update dependencies to latest stable
## [1.3.0] - 2020-03-31
- Use dynamic Jetpack logos on JITMs
## [1.2.0] - 2020-02-25
- JITM: Show ToS update notice
## [1.1.2] - 2020-02-14
- SSO: do not display JITM when not in wp-admin
## [1.1.1] - 2020-01-23
- Moved JITM initialization to plugins_loaded.
## [1.1.0] - 2020-01-07
- Add partner subsidiary id to upgrade URLs.
## [1.0.10] - 2019-11-25
- Connection Owner Deletion Notice: Fix display bug and sanitize…
## [1.0.9] - 2019-11-19
- Don't show JITMs on Gutenberg editor pages (for now)
## [1.0.8] - 2019-11-08
- Packages: Use classmap instead of PSR-4
## [1.0.7] - 2019-11-08
- Remove unused get_emblem method
## [1.0.6] - 2019-10-31
- Inherit 400 weight for button fonts
## [1.0.5] - 2019-10-28
- PHPCS: JITM and Assets packages
## [1.0.4] - 2019-10-24
- Update Jetpack button and card styles to match WordPress 5.3
## [1.0.3] - 2019-10-23
- Use spread operator instead of func_get_args
## [1.0.2] - 2019-10-17
- Change the class in the add_filter() calls to $this. Also fix some
## [1.0.1] - 2019-09-27
- Initial trial of prefer-dist
- JITM: Send the user's role in the request for JITM messages
## 1.0.0 - 2019-09-14
- Update Jetpack to use new JITM package
[2.2.26]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.25...v2.2.26
[2.2.25]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.24...v2.2.25
[2.2.24]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.23...v2.2.24
[2.2.23]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.22...v2.2.23
[2.2.22]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.21...v2.2.22
[2.2.21]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.20...v2.2.21
[2.2.20]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.19...v2.2.20
[2.2.19]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.18...v2.2.19
[2.2.18]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.17...v2.2.18
[2.2.17]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.16...v2.2.17
[2.2.16]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.15...v2.2.16
[2.2.15]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.14...v2.2.15
[2.2.14]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.13...v2.2.14
[2.2.13]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.12...v2.2.13
[2.2.12]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.11...v2.2.12
[2.2.11]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.10...v2.2.11
[2.2.10]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.9...v2.2.10
[2.2.9]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.8...v2.2.9
[2.2.8]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.7...v2.2.8
[2.2.7]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.6...v2.2.7
[2.2.6]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.5...v2.2.6
[2.2.5]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.4...v2.2.5
[2.2.4]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.3...v2.2.4
[2.2.3]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.2...v2.2.3
[2.2.2]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.1...v2.2.2
[2.2.1]: https://github.com/Automattic/jetpack-jitm/compare/v2.2.0...v2.2.1
[2.2.0]: https://github.com/Automattic/jetpack-jitm/compare/v2.1.1...v2.2.0
[2.1.1]: https://github.com/Automattic/jetpack-jitm/compare/v2.1.0...v2.1.1
[2.1.0]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.8...v2.1.0
[2.0.8]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.7...v2.0.8
[2.0.7]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.6...v2.0.7
[2.0.6]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.5...v2.0.6
[2.0.5]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.4...v2.0.5
[2.0.4]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.3...v2.0.4
[2.0.3]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.2...v2.0.3
[2.0.2]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.1...v2.0.2
[2.0.1]: https://github.com/Automattic/jetpack-jitm/compare/v2.0.0...v2.0.1
[2.0.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.16.2...v2.0.0
[1.16.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.16.1...v1.16.2
[1.16.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.16.0...v1.16.1
[1.16.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.15.1...v1.16.0
[1.15.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.15.0...v1.15.1
[1.15.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.14.1...v1.15.0
[1.14.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.14.0...v1.14.1
[1.14.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.13.5...v1.14.0
[1.13.5]: https://github.com/Automattic/jetpack-jitm/compare/v1.13.4...v1.13.5
[1.13.4]: https://github.com/Automattic/jetpack-jitm/compare/v1.13.3...v1.13.4
[1.13.3]: https://github.com/Automattic/jetpack-jitm/compare/v1.13.2...v1.13.3
[1.13.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.13.1...v1.13.2
[1.13.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.13.0...v1.13.1
[1.13.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.12.2...v1.13.0
[1.12.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.12.1...v1.12.2
[1.12.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.12.0...v1.12.1
[1.12.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.11.2...v1.12.0
[1.11.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.11.1...v1.11.2
[1.11.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.11.0...v1.11.1
[1.11.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.10.4...v1.11.0
[1.10.4]: https://github.com/Automattic/jetpack-jitm/compare/v1.10.3...v1.10.4
[1.10.3]: https://github.com/Automattic/jetpack-jitm/compare/v1.10.2...v1.10.3
[1.10.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.10.1...v1.10.2
[1.10.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.10.0...v1.10.1
[1.10.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.9.1...v1.10.0
[1.9.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.9.0...v1.9.1
[1.9.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.8.2...v1.9.0
[1.8.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.8.1...v1.8.2
[1.8.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.8.0...v1.8.1
[1.8.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.7.2...v1.8.0
[1.7.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.7.1...v1.7.2
[1.7.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.7.0...v1.7.1
[1.7.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.6.5...v1.7.0
[1.6.5]: https://github.com/Automattic/jetpack-jitm/compare/v1.6.4...v1.6.5
[1.6.4]: https://github.com/Automattic/jetpack-jitm/compare/v1.6.3...v1.6.4
[1.6.3]: https://github.com/Automattic/jetpack-jitm/compare/v1.6.2...v1.6.3
[1.6.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.6.1...v1.6.2
[1.6.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.6.0...v1.6.1
[1.6.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.5.1...v1.6.0
[1.5.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.4.0...v1.5.0
[1.4.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.3.0...v1.4.0
[1.3.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.1.2...v1.2.0
[1.1.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.1.1...v1.1.2
[1.1.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.10...v1.1.0
[1.0.10]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.9...v1.0.10
[1.0.9]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.8...v1.0.9
[1.0.8]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.7...v1.0.8
[1.0.7]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.6...v1.0.7
[1.0.6]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.5...v1.0.6
[1.0.5]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.4...v1.0.5
[1.0.4]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.3...v1.0.4
[1.0.3]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.2...v1.0.3
[1.0.2]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.1...v1.0.2
[1.0.1]: https://github.com/Automattic/jetpack-jitm/compare/v1.0.0...v1.0.1

View File

@ -0,0 +1,357 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -0,0 +1,38 @@
# Security Policy
Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/).
## Supported Versions
Generally, only the latest version of Jetpack has continued support. If a critical vulnerability is found in the current version of Jetpack, we may opt to backport any patches to previous versions.
## Reporting a Vulnerability
[Jetpack](https://jetpack.com/) is an open-source plugin for WordPress. Our HackerOne program covers the plugin software, as well as a variety of related projects and infrastructure.
**For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.**
Our most critical targets are:
* Jetpack and the Jetpack composer packages (all within this repo)
* Jetpack.com -- the primary marketing site.
* cloud.jetpack.com -- a management site.
* wordpress.com -- the shared management site for both Jetpack and WordPress.com sites.
For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic).
_Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._
## Guidelines
We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines:
* Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines).
* Pen-testing Production:
* Please **setup a local environment** instead whenever possible. Most of our code is open source (see above).
* If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC.
* **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels.
* To be eligible for a bounty, all of these guidelines must be followed.
* Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability.
We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties.

View File

@ -0,0 +1 @@
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '2844220d1ce117cbcaed');

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(()=>{"use strict";jQuery(document).ready((function(t){var a={default:function(a){var e='<div class="jitm-card jitm-banner '+(a.CTA.message?"has-call-to-action":"")+" is-upgrade-premium "+a.content.classes+'" data-stats_url="'+a.jitm_stats_url+'">';if(e+='<div class="jitm-banner__content">',e+='<div class="jitm-banner__icon-plan">'+a.content.icon+"</div>",e+='<div class="jitm-banner__info">',e+='<div class="jitm-banner__title">'+a.content.message+"</div>",a.content.description&&""!==a.content.description){if(e+='<div class="jitm-banner__description">'+a.content.description,a.content.list.length>0){e+='<ul class="banner__list">';for(var i=0;i<a.content.list.length;i++){var n=a.content.list[i].item;a.content.list[i].url&&(n='<a href="'+a.content.list[i].url+'" target="_blank" rel="noopener noreferrer" data-module="'+a.feature_class+'" data-jptracks-name="nudge_item_click" data-jptracks-prop="jitm-'+a.id+'">'+n+"</a>"),e+='<li><svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414" /></g></svg>'+n+"</li>"}}e+="</div>"}if(e+="</div>",e+="</div>",e+='<div class="jitm-banner__buttons_container">',a.activate_module&&(e+='<div class="jitm-banner__action" id="jitm-banner__activate">',e+='<a href="#" data-module="'+a.activate_module+'" type="button" class="jitm-button is-compact is-primary jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-'+a.id+'-activate_module">'+window.jitm_config.activate_module_text+"</a>",e+="</div>"),a.CTA.message){var c="jitm-button is-compact jptracks";a.CTA.primary&&null===a.activate_module&&(c+=" is-primary");var o=a.CTA.ajax_action;e+='<div class="jitm-banner__action">',e+='<a href="'+(a.CTA.hasOwnProperty("link")&&a.CTA.link.length?a.CTA.link:a.url)+'" target="'+(!1===a.CTA.newWindow||o?"_self":"_blank")+'" rel="noopener noreferrer" title="'+a.CTA.message+'" data-module="'+a.feature_class+'" type="button" class="'+c+'" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-'+a.id+'" '+(o?'data-ajax-action="'+o+'"':"")+">"+a.CTA.message+"</a>",e+="</div>"}return e+="</div>",a.is_dismissible&&(e+='<a href="#" data-module="'+a.feature_class+'" class="jitm-banner__dismiss"></a>'),t(e+="</div>")}},e=function(){t(".jetpack-jitm-message").each((function(){var e=t(this),i=e.data("message-path"),n=e.data("query"),c=e.data("redirect"),o=location.hash;"_dashboard"!==(o=o.replace(/#\//,"_"))&&(i=i.replace("toplevel_page_jetpack","toplevel_page_jetpack"+o));var r=!!t(".jetpack-logo__masthead").length;t.get(window.jitm_config.api_root+"jetpack/v4/jitm",{message_path:i,query:n,full_jp_logo_exists:r,_wpnonce:e.data("nonce")}).then((function(i){"object"==typeof i&&i[1]&&(i=[i[1]]),0!==i.length&&i[0].content&&function(e,i,n){var c;(c=i.template)&&a[c]||(c="default"),i.url=i.url+"&redirect="+n;var o,r=a[c](i);r.find(".jitm-banner__dismiss").on("click",(o=r,function(a){a.preventDefault(),o.hide(),t.ajax({url:window.jitm_config.api_root+"jetpack/v4/jitm",method:"POST",beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",window.jitm_config.nonce)},data:{id:i.id,feature_class:i.feature_class}})})),t("#jp-admin-notices").length>0?(e.innerHTML=r,t("#jp-admin-notices").find(".jitm-card")&&t(".jitm-card").replaceWith(r),r.prependTo(t("#jp-admin-notices"))):e.replaceWith(r),r.find("#jitm-banner__activate a").on("click",(function(){var a=t(this);if(a.attr("disabled"))return!1;t.ajax({url:window.jitm_config.api_root+"jetpack/v4/module/"+a.data("module")+"/active",method:"POST",beforeSend:function(a){a.setRequestHeader("X-WP-Nonce",e.data("nonce")),t("#jitm-banner__activate a").text(window.jitm_config.activating_module_text),t("#jitm-banner__activate a").attr("disabled",!0)}}).done((function(){t("#jitm-banner__activate a").text(window.jitm_config.activated_module_text),t("#jitm-banner__activate a").attr("disabled",!0),setTimeout((function(){r.fadeOut("slow")}),2e3)}))})),r.find(".jitm-button[data-ajax-action]").on("click",(function(a){a.preventDefault();var i=t(this);return i.attr("disabled",!0),t.post(window.ajaxurl,{action:i.data("ajax-action"),_nonce:e.data("ajax-nonce")}).done((function(){r.fadeOut("slow")})).fail((function(){i.attr("disabled",!1)})),!1}))}(e,i[0],c)}))}))};e(),t(window).on("hashchange",(function(t){if(t.originalEvent.newURL.indexOf("jetpack#/")>=0){var a=document.querySelector(".jitm-card");a&&a.remove(),e()}}))}))})();

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,59 @@
{
"name": "automattic/jetpack-jitm",
"description": "Just in time messages for Jetpack",
"type": "jetpack-library",
"license": "GPL-2.0-or-later",
"require": {
"automattic/jetpack-a8c-mc-stats": "^1.4",
"automattic/jetpack-assets": "^1.17",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-device-detection": "^1.4",
"automattic/jetpack-logo": "^1.5",
"automattic/jetpack-partner": "^1.7",
"automattic/jetpack-redirect": "^1.7",
"automattic/jetpack-status": "^1.14"
},
"require-dev": {
"brain/monkey": "2.6.1",
"yoast/phpunit-polyfills": "1.0.3",
"automattic/jetpack-changelogger": "^3.2"
},
"autoload": {
"classmap": [
"src/"
]
},
"scripts": {
"build-production": [
"pnpm run build-production"
],
"build-development": [
"pnpm run build"
],
"phpunit": [
"./vendor/phpunit/phpunit/phpunit --colors=always"
],
"test-coverage": [
"php -dpcov.directory=. ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\""
],
"test-php": [
"@composer phpunit"
]
},
"minimum-stability": "dev",
"prefer-stable": true,
"extra": {
"autotagger": true,
"mirror-repo": "Automattic/jetpack-jitm",
"textdomain": "jetpack-jitm",
"version-constants": {
"::PACKAGE_VERSION": "src/class-jitm.php"
},
"changelogger": {
"link-template": "https://github.com/Automattic/jetpack-jitm/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "2.2.x-dev"
}
}
}

View File

@ -0,0 +1,312 @@
<?php
/**
* Jetpack's JITM class.
*
* @package automattic/jetpack-jitm
*/
namespace Automattic\Jetpack\JITMS;
use Automattic\Jetpack\Assets;
use Automattic\Jetpack\Assets\Logo as Jetpack_Logo;
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
use Automattic\Jetpack\Status;
/**
* Jetpack just in time messaging through out the admin
*
* @since 1.1.0
* @since-jetpack 5.6.0
*/
class JITM {
const PACKAGE_VERSION = '2.2.26';
/**
* The configuration method that is called from the jetpack-config package.
*/
public static function configure() {
$jitm = self::get_instance();
$jitm->register();
}
/**
* Pre/Post Connection JITM factory metod
*
* @return Post_Connection_JITM|Pre_Connection_JITM JITM instance.
*/
public static function get_instance() {
if ( ( new Connection_Manager() )->is_connected() ) {
$jitm = new Post_Connection_JITM();
} else {
$jitm = new Pre_Connection_JITM();
}
return $jitm;
}
/**
* Sets up JITM action callbacks if needed.
*/
public function register() {
if ( did_action( 'jetpack_registered_jitms' ) ) {
// JITMs have already been registered.
return;
}
if ( ! $this->jitms_enabled() ) {
// Do nothing.
return;
}
add_action( 'rest_api_init', array( __NAMESPACE__ . '\\Rest_Api_Endpoints', 'register_endpoints' ) );
add_action( 'current_screen', array( $this, 'prepare_jitms' ) );
/**
* These are sync actions that we need to keep track of for jitms.
*/
add_filter( 'jetpack_sync_before_send_updated_option', array( $this, 'jetpack_track_last_sync_callback' ), 99 );
/**
* Fires when the JITMs are registered. This action is used to ensure that
* JITMs are registered only once.
*
* @since 1.16.0
*/
do_action( 'jetpack_registered_jitms' );
}
/**
* Checks the jetpack_just_in_time_msgs filters and whether the site
* is offline to determine whether JITMs are enabled.
*
* @return bool True if JITMs are enabled, else false.
*/
public function jitms_enabled() {
/**
* Filter to turn off all just in time messages
*
* @since 1.1.0
* @since-jetpack 3.7.0
* @since-jetpack 5.4.0 Correct docblock to reflect default arg value
*
* @param bool true Whether to show just in time messages.
*/
if ( ! apply_filters( 'jetpack_just_in_time_msgs', true ) ) {
return false;
}
// Folks cannot connect to WordPress.com and won't really be able to act on the pre-connection messages. So bail.
if ( ( new Status() )->is_offline_mode() ) {
return false;
}
return true;
}
/**
* Prepare actions according to screen and post type.
*
* @since 1.1.0
* @since-jetpack 3.8.2
*
* @uses Jetpack_Autoupdate::get_possible_failures()
*
* @param \WP_Screen $screen WP Core's screen object.
*/
public function prepare_jitms( $screen ) {
/**
* Filter to hide JITMs on certain screens.
*
* @since 1.14.0
*
* @param bool true Whether to show just in time messages.
* @param string $string->id The ID of the current screen.
*/
if ( apply_filters( 'jetpack_display_jitms_on_screen', true, $screen->id ) ) {
add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
add_action( 'admin_notices', array( $this, 'ajax_message' ) );
add_action( 'edit_form_top', array( $this, 'ajax_message' ) );
}
}
/**
* Function to enqueue jitm css and js
*/
public function jitm_enqueue_files() {
if ( $this->is_gutenberg_page() ) {
return;
}
Assets::register_script(
'jetpack-jitm',
'../build/index.js',
__FILE__,
array(
'in_footer' => true,
'dependencies' => array( 'jquery' ),
)
);
Assets::enqueue_script( 'jetpack-jitm' );
wp_localize_script(
'jetpack-jitm',
'jitm_config',
array(
'api_root' => esc_url_raw( rest_url() ),
'activate_module_text' => esc_html__( 'Activate', 'jetpack-jitm' ),
'activated_module_text' => esc_html__( 'Activated', 'jetpack-jitm' ),
'activating_module_text' => esc_html__( 'Activating', 'jetpack-jitm' ),
'nonce' => wp_create_nonce( 'wp_rest' ),
)
);
}
/**
* Is the current page a block editor page?
*
* @since 1.1.0
* @since-jetpack 8.0.0
*/
public function is_gutenberg_page() {
$current_screen = get_current_screen();
return ( method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor() );
}
/**
* Get's the current message path for display of a JITM
*
* @return string The message path
*/
public function get_message_path() {
$screen = get_current_screen();
return 'wp:' . $screen->id . ':' . current_filter();
}
/**
* Injects the dom to show a JITM inside of wp-admin.
*/
public function ajax_message() {
if ( ! is_admin() ) {
return;
}
// do not display on Gutenberg pages.
if ( $this->is_gutenberg_page() ) {
return;
}
$message_path = $this->get_message_path();
$query_string = _http_build_query( $_GET, '', ',' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$current_screen = isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- Escaped below
?>
<div class="jetpack-jitm-message"
data-nonce="<?php echo esc_attr( wp_create_nonce( 'wp_rest' ) ); ?>"
data-ajax-nonce="<?php echo esc_attr( wp_create_nonce( 'wp_ajax_action' ) ); ?>"
data-message-path="<?php echo esc_attr( $message_path ); ?>"
data-query="<?php echo urlencode_deep( $query_string ); ?>"
data-redirect="<?php echo urlencode_deep( $current_screen ); ?>"
></div>
<?php
}
/**
* Generate the icon to display on the JITM.
*
* All icons supported in this method should be included in the array returned by
* JITM::get_supported_icons.
*
* @param string $content_icon Icon type name.
* @param bool $full_jp_logo_exists Is there a big JP logo already displayed on this screen.
*/
public function generate_icon( $content_icon, $full_jp_logo_exists ) {
switch ( $content_icon ) {
case 'jetpack':
$jetpack_logo = new Jetpack_Logo();
$content_icon = '<div class="jp-emblem">' . ( ( $full_jp_logo_exists ) ? $jetpack_logo->get_jp_emblem() : $jetpack_logo->get_jp_emblem_larger() ) . '</div>';
break;
case 'woocommerce':
$content_icon = '<div class="jp-emblem"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 168 100" xml:space="preserve" enable-background="new 0 0 168 100" width="50" height="30"><style type="text/css">
.st0{clip-path:url(#SVGID_2_);enable-background:new ;}
.st1{clip-path:url(#SVGID_4_);}
.st2{clip-path:url(#SVGID_6_);}
.st3{clip-path:url(#SVGID_8_);fill:#8F567F;}
.st4{clip-path:url(#SVGID_10_);fill:#FFFFFE;}
.st5{clip-path:url(#SVGID_12_);fill:#FFFFFE;}
.st6{clip-path:url(#SVGID_14_);fill:#FFFFFE;}
</style><g><defs><polygon id="SVGID_1_" points="83.8 100 0 100 0 0.3 83.8 0.3 167.6 0.3 167.6 100 "/></defs><clipPath id="SVGID_2_"><use xlink:href="#SVGID_1_" overflow="visible"/></clipPath><g class="st0"><g><defs><rect id="SVGID_3_" width="168" height="100"/></defs><clipPath id="SVGID_4_"><use xlink:href="#SVGID_3_" overflow="visible"/></clipPath><g class="st1"><defs><path id="SVGID_5_" d="M15.6 0.3H152c8.6 0 15.6 7 15.6 15.6v52c0 8.6-7 15.6-15.6 15.6h-48.9l6.7 16.4L80.2 83.6H15.6C7 83.6 0 76.6 0 67.9v-52C0 7.3 7 0.3 15.6 0.3"/></defs><clipPath id="SVGID_6_"><use xlink:href="#SVGID_5_" overflow="visible"/></clipPath><g class="st2"><defs><rect id="SVGID_7_" width="168" height="100"/></defs><clipPath id="SVGID_8_"><use xlink:href="#SVGID_7_" overflow="visible"/></clipPath><rect x="-10" y="-9.7" class="st3" width="187.6" height="119.7"/></g></g></g></g></g><g><defs><path id="SVGID_9_" d="M8.4 14.5c1-1.3 2.4-2 4.3-2.1 3.5-0.2 5.5 1.4 6 4.9 2.1 14.3 4.4 26.4 6.9 36.4l15-28.6c1.4-2.6 3.1-3.9 5.2-4.1 3-0.2 4.9 1.7 5.6 5.7 1.7 9.1 3.9 16.9 6.5 23.4 1.8-17.4 4.8-30 9-37.7 1-1.9 2.5-2.9 4.5-3 1.6-0.1 3 0.3 4.3 1.4 1.3 1 2 2.3 2.1 3.9 0.1 1.2-0.1 2.3-0.7 3.3 -2.7 5-4.9 13.2-6.6 24.7 -1.7 11.1-2.3 19.8-1.9 26.1 0.1 1.7-0.1 3.2-0.8 4.5 -0.8 1.5-2 2.4-3.7 2.5 -1.8 0.1-3.6-0.7-5.4-2.5C52.4 66.7 47.4 57 43.7 44.1c-4.4 8.8-7.7 15.3-9.9 19.7 -4 7.7-7.5 11.7-10.3 11.9 -1.9 0.1-3.5-1.4-4.8-4.7 -3.5-9-7.3-26.3-11.3-52C7.1 17.3 7.5 15.8 8.4 14.5"/></defs><clipPath id="SVGID_10_"><use xlink:href="#SVGID_9_" overflow="visible"/></clipPath><rect x="-2.7" y="-0.6" class="st4" width="90.6" height="86.4"/></g><g><defs><path id="SVGID_11_" d="M155.6 25.2c-2.5-4.3-6.1-6.9-11-7.9 -1.3-0.3-2.5-0.4-3.7-0.4 -6.6 0-11.9 3.4-16.1 10.2 -3.6 5.8-5.3 12.3-5.3 19.3 0 5.3 1.1 9.8 3.3 13.6 2.5 4.3 6.1 6.9 11 7.9 1.3 0.3 2.5 0.4 3.7 0.4 6.6 0 12-3.4 16.1-10.2 3.6-5.9 5.3-12.4 5.3-19.4C159 33.4 157.9 28.9 155.6 25.2zM147 44.2c-0.9 4.5-2.7 7.9-5.2 10.1 -2 1.8-3.9 2.5-5.5 2.2 -1.7-0.3-3-1.8-4-4.4 -0.8-2.1-1.2-4.2-1.2-6.2 0-1.7 0.2-3.4 0.5-5 0.6-2.8 1.8-5.5 3.6-8.1 2.3-3.3 4.7-4.8 7.1-4.2 1.7 0.3 3 1.8 4 4.4 0.8 2.1 1.2 4.2 1.2 6.2C147.5 40.9 147.3 42.6 147 44.2z"/></defs><clipPath id="SVGID_12_"><use xlink:href="#SVGID_11_" overflow="visible"/></clipPath><rect x="109.6" y="6.9" class="st5" width="59.4" height="71.4"/></g><g><defs><path id="SVGID_13_" d="M112.7 25.2c-2.5-4.3-6.1-6.9-11-7.9 -1.3-0.3-2.5-0.4-3.7-0.4 -6.6 0-11.9 3.4-16.1 10.2 -3.5 5.8-5.3 12.3-5.3 19.3 0 5.3 1.1 9.8 3.3 13.6 2.5 4.3 6.1 6.9 11 7.9 1.3 0.3 2.5 0.4 3.7 0.4 6.6 0 12-3.4 16.1-10.2 3.5-5.9 5.3-12.4 5.3-19.4C116 33.4 114.9 28.9 112.7 25.2zM104.1 44.2c-0.9 4.5-2.7 7.9-5.2 10.1 -2 1.8-3.9 2.5-5.5 2.2 -1.7-0.3-3-1.8-4-4.4 -0.8-2.1-1.2-4.2-1.2-6.2 0-1.7 0.2-3.4 0.5-5 0.6-2.8 1.8-5.5 3.6-8.1 2.3-3.3 4.7-4.8 7.1-4.2 1.7 0.3 3 1.8 4 4.4 0.8 2.1 1.2 4.2 1.2 6.2C104.6 40.9 104.4 42.6 104.1 44.2z"/></defs><clipPath id="SVGID_14_"><use xlink:href="#SVGID_13_" overflow="visible"/></clipPath><rect x="66.7" y="6.9" class="st6" width="59.4" height="71.4"/></g></svg></div>';
break;
default:
$content_icon = '';
break;
}
return $content_icon;
}
/**
* Returns an array containing the supported icons for JITMs.
*
* The list includes an empty string, which is used when no icon should be displayed.
*
* @return array The list of supported icons.
*/
public function get_supported_icons() {
return array(
'jetpack',
'woocommerce',
'',
);
}
/**
* Stores dismiss data into an option
*
* @param string $key Dismiss key.
*/
public function save_dismiss( $key ) {
$hide_jitm = \Jetpack_Options::get_option( 'hide_jitm' );
if ( ! is_array( $hide_jitm ) ) {
$hide_jitm = array();
}
if ( ! isset( $hide_jitm[ $key ] ) || ! is_array( $hide_jitm[ $key ] ) ) {
$hide_jitm[ $key ] = array(
'last_dismissal' => 0,
'number' => 0,
);
}
$hide_jitm[ $key ] = array(
'last_dismissal' => time(),
'number' => $hide_jitm[ $key ]['number'] + 1,
);
\Jetpack_Options::update_option( 'hide_jitm', $hide_jitm );
}
/**
* Sets the 'jetpack_last_plugin_sync' transient when the active_plugins option is synced.
*
* @param array $params The action parameters.
*
* @return array Returns the action parameters unchanged.
*/
public function jetpack_track_last_sync_callback( $params ) {
/**
* This filter is documented in the Automattic\Jetpack\JITMS\Post_Connection_JITM class.
*/
if ( ! apply_filters( 'jetpack_just_in_time_msg_cache', true ) ) {
return $params;
}
if ( is_array( $params ) && isset( $params[0] ) ) {
$option = $params[0];
if ( 'active_plugins' === $option ) {
// Use the cache if we can, but not terribly important if it gets evicted.
set_transient( 'jetpack_last_plugin_sync', time(), HOUR_IN_SECONDS );
}
}
return $params;
}
}

View File

@ -0,0 +1,607 @@
<?php
/**
* Jetpack's Post-Connection JITM class.
*
* @package automattic/jetpack-jitm
*/
namespace Automattic\Jetpack\JITMS;
use Automattic\Jetpack\A8c_Mc_Stats;
use Automattic\Jetpack\Connection\Client;
use Automattic\Jetpack\Connection\Manager;
use Automattic\Jetpack\Device_Detection;
use Automattic\Jetpack\Partner;
use Automattic\Jetpack\Redirect;
use Automattic\Jetpack\Tracking;
/**
* Jetpack just in time messaging through out the admin
*
* @since 1.1.0
*
* @since-jetpack 5.6.0
*/
class Post_Connection_JITM extends JITM {
/**
* Tracking object.
*
* @var Automattic\Jetpack\Tracking
*
* @access private
*/
public $tracking;
/**
* JITM constructor.
*/
public function __construct() {
$this->tracking = new Tracking();
}
/**
* Prepare actions according to screen and post type.
*
* @since 1.1.0
* @since-jetpack 3.8.2
*
* @uses Jetpack_Autoupdate::get_possible_failures()
*
* @param \WP_Screen $screen WP Core's screen object.
*/
public function prepare_jitms( $screen ) {
parent::prepare_jitms( $screen );
if ( ! in_array(
$screen->id,
array(
'jetpack_page_akismet-key-config',
'admin_page_jetpack_modules',
),
true
) ) {
// Not really a JITM. Don't know where else to put this :) .
add_action( 'admin_notices', array( $this, 'delete_user_update_connection_owner_notice' ) );
}
}
/**
* A special filter for WooCommerce, to set a message based on local state.
*
* @param string $content The current message.
*
* @return array The new message.
*/
public static function jitm_woocommerce_services_msg( $content ) {
if ( ! function_exists( 'wc_get_base_location' ) ) {
return $content;
}
$base_location = wc_get_base_location();
switch ( $base_location['country'] ) {
case 'US':
$content->message = esc_html__( 'New free service: Show USPS shipping rates on your store! Added bonus: print shipping labels without leaving WooCommerce.', 'jetpack-jitm' );
break;
case 'CA':
$content->message = esc_html__( 'New free service: Show Canada Post shipping rates on your store!', 'jetpack-jitm' );
break;
default:
$content->message = '';
}
return $content;
}
/**
* A special filter for WooCommerce Call To Action button
*
* @return string The new CTA
*/
public static function jitm_jetpack_woo_services_install() {
return wp_nonce_url(
add_query_arg(
array(
'wc-services-action' => 'install',
),
admin_url( 'admin.php?page=wc-settings' )
),
'wc-services-install'
);
}
/**
* A special filter for WooCommerce Call To Action button.
*
* @return string The new CTA
*/
public static function jitm_jetpack_woo_services_activate() {
return wp_nonce_url(
add_query_arg(
array(
'wc-services-action' => 'activate',
),
admin_url( 'admin.php?page=wc-settings' )
),
'wc-services-install'
);
}
/**
* A special filter used in the CTA of a JITM offering to install the Creative Mail plugin.
*
* @return string The new CTA
*/
public static function jitm_jetpack_creative_mail_install() {
return wp_nonce_url(
add_query_arg(
array(
'creative-mail-action' => 'install',
),
admin_url( 'edit.php?post_type=feedback' )
),
'creative-mail-install'
);
}
/**
* A special filter used in the CTA of a JITM offering to activate the Creative Mail plugin.
*
* @return string The new CTA
*/
public static function jitm_jetpack_creative_mail_activate() {
return wp_nonce_url(
add_query_arg(
array(
'creative-mail-action' => 'activate',
),
admin_url( 'edit.php?post_type=feedback' )
),
'creative-mail-install'
);
}
/**
* A special filter used in the CTA of a JITM offering to install the Jetpack Backup plugin.
*
* @return string The new CTA
*/
public static function jitm_jetpack_backup_install() {
return wp_nonce_url(
add_query_arg(
array(
'jetpack-backup-action' => 'install',
),
admin_url( 'admin.php?page=jetpack' )
),
'jetpack-backup-install'
);
}
/**
* A special filter used in the CTA of a JITM offering to activate the Jetpack Backup plugin.
*
* @return string The new CTA
*/
public static function jitm_jetpack_backup_activate() {
return wp_nonce_url(
add_query_arg(
array(
'jetpack-backup-action' => 'activate',
),
admin_url( 'admin.php?page=jetpack' )
),
'jetpack-backup-install'
);
}
/**
* A special filter used in the CTA of a JITM offering to install the Jetpack Boost plugin.
*
* @return string The new CTA
*/
public static function jitm_jetpack_boost_install() {
return wp_nonce_url(
add_query_arg(
array(
'jetpack-boost-action' => 'install',
),
admin_url( 'admin.php?page=jetpack' )
),
'jetpack-boost-install'
);
}
/**
* A special filter used in the CTA of a JITM offering to activate the Jetpack Boost plugin.
*
* @return string The new CTA
*/
public static function jitm_jetpack_boost_activate() {
return wp_nonce_url(
add_query_arg(
array(
'jetpack-boost-action' => 'activate',
),
admin_url( 'admin.php?page=jetpack' )
),
'jetpack-boost-install'
);
}
/**
* This is an entire admin notice dedicated to messaging and handling of the case where a user is trying to delete
* the connection owner.
*/
public function delete_user_update_connection_owner_notice() {
global $current_screen;
/*
* phpcs:disable WordPress.Security.NonceVerification.Recommended
*
* This function is firing within wp-admin and checks (below) if it is in the midst of a deletion on the users
* page. Nonce will be already checked by WordPress, so we do not need to check ourselves.
*/
if ( ! isset( $current_screen->base ) || 'users' !== $current_screen->base ) {
return;
}
if ( ! isset( $_REQUEST['action'] ) || 'delete' !== $_REQUEST['action'] ) {
return;
}
// Get connection owner or bail.
$connection_manager = new Manager();
$connection_owner_id = $connection_manager->get_connection_owner_id();
if ( ! $connection_owner_id ) {
return;
}
$connection_owner_userdata = get_userdata( $connection_owner_id );
// Bail if we're not trying to delete connection owner.
$user_ids_to_delete = array();
if ( isset( $_REQUEST['users'] ) ) {
$user_ids_to_delete = array_map( 'sanitize_text_field', wp_unslash( $_REQUEST['users'] ) );
} elseif ( isset( $_REQUEST['user'] ) ) {
$user_ids_to_delete[] = sanitize_text_field( wp_unslash( $_REQUEST['user'] ) );
}
// phpcs:enable
$user_ids_to_delete = array_map( 'absint', $user_ids_to_delete );
$deleting_connection_owner = in_array( $connection_owner_id, (array) $user_ids_to_delete, true );
if ( ! $deleting_connection_owner ) {
return;
}
// Bail if they're trying to delete themselves to avoid confusion.
if ( get_current_user_id() === $connection_owner_id ) {
return;
}
// Track it!
if ( method_exists( $this->tracking, 'record_user_event' ) ) {
$this->tracking->record_user_event( 'delete_connection_owner_notice_view' );
}
$connected_admins = $connection_manager->get_connected_users( 'jetpack_disconnect' );
$user = is_a( $connection_owner_userdata, 'WP_User' ) ? esc_html( $connection_owner_userdata->data->user_login ) : '';
echo "<div class='notice notice-warning' id='jetpack-notice-switch-connection-owner'>";
echo '<h2>' . esc_html__( 'Important notice about your Jetpack connection:', 'jetpack-jitm' ) . '</h2>';
echo '<p>' . sprintf(
/* translators: WordPress User, if available. */
esc_html__( 'Warning! You are about to delete the Jetpack connection owner (%s) for this site, which may cause some of your Jetpack features to stop working.', 'jetpack-jitm' ),
esc_html( $user )
) . '</p>';
if ( ! empty( $connected_admins ) && count( $connected_admins ) > 1 ) {
echo '<form id="jp-switch-connection-owner" action="" method="post">';
echo "<label for='owner'>" . esc_html__( 'You can choose to transfer connection ownership to one of these already-connected admins:', 'jetpack-jitm' ) . ' </label>';
$connected_admin_ids = array_map(
function ( $connected_admin ) {
return $connected_admin->ID;
},
$connected_admins
);
wp_dropdown_users(
array(
'name' => 'owner',
'include' => array_diff( $connected_admin_ids, array( $connection_owner_id ) ),
'show' => 'display_name_with_login',
)
);
echo '<p>';
submit_button( esc_html__( 'Set new connection owner', 'jetpack-jitm' ), 'primary', 'jp-switch-connection-owner-submit', false );
echo '</p>';
echo "<div id='jp-switch-user-results'></div>";
echo '</form>';
?>
<script type="text/javascript">
jQuery( document ).ready( function( $ ) {
$( '#jp-switch-connection-owner' ).on( 'submit', function( e ) {
var formData = $( this ).serialize();
var submitBtn = document.getElementById( 'jp-switch-connection-owner-submit' );
var results = document.getElementById( 'jp-switch-user-results' );
submitBtn.disabled = true;
$.ajax( {
type : "POST",
url : "<?php echo esc_url( get_rest_url() . 'jetpack/v4/connection/owner' ); ?>",
data : formData,
headers : {
'X-WP-Nonce': "<?php echo esc_js( wp_create_nonce( 'wp_rest' ) ); ?>",
},
success: function() {
results.innerHTML = "<?php esc_html_e( 'Success!', 'jetpack-jitm' ); ?>";
setTimeout( function() {
$( '#jetpack-notice-switch-connection-owner' ).hide( 'slow' );
}, 1000 );
}
} ).done( function() {
submitBtn.disabled = false;
} );
e.preventDefault();
return false;
} );
} );
</script>
<?php
} else {
echo '<p>' . esc_html__( 'Every Jetpack site needs at least one connected admin for the features to work properly. Please connect to your WordPress.com account via the button below. Once you connect, you may refresh this page to see an option to change the connection owner.', 'jetpack-jitm' ) . '</p>';
$connect_url = $connection_manager->get_authorization_url();
$connect_url = add_query_arg( 'from', 'delete_connection_owner_notice', $connect_url );
echo "<a href='" . esc_url( $connect_url ) . "' target='_blank' rel='noopener noreferrer' class='button-primary'>" . esc_html__( 'Connect to WordPress.com', 'jetpack-jitm' ) . '</a>';
}
echo '<p>';
printf(
wp_kses(
/* translators: URL to Jetpack support doc regarding the primary user. */
__( "<a href='%s' target='_blank' rel='noopener noreferrer'>Learn more</a> about the connection owner and what will break if you do not have one.", 'jetpack-jitm' ),
array(
'a' => array(
'href' => true,
'target' => true,
'rel' => true,
),
)
),
esc_url( Redirect::get_url( 'jetpack-support-primary-user' ) )
);
echo '</p>';
echo '<p>';
printf(
wp_kses(
/* translators: URL to contact Jetpack support. */
__( 'As always, feel free to <a href="%s" target="_blank" rel="noopener noreferrer">contact our support team</a> if you have any questions.', 'jetpack-jitm' ),
array(
'a' => array(
'href' => true,
'target' => true,
'rel' => true,
),
)
),
esc_url( Redirect::get_url( 'jetpack-contact-support' ) )
);
echo '</p>';
echo '</div>';
}
/**
* Dismisses a JITM feature class so that it will no longer be shown.
*
* @param string $id The id of the JITM that was dismissed.
* @param string $feature_class The feature class of the JITM that was dismissed.
*
* @return bool Always true.
*/
public function dismiss( $id, $feature_class ) {
$this->tracking->record_user_event(
'jitm_dismiss_client',
array(
'jitm_id' => $id,
'feature_class' => $feature_class,
)
);
$this->save_dismiss( $feature_class );
return true;
}
/**
* Asks the wpcom API for the current message to display keyed on query string and message path
*
* @param string $message_path The message path to ask for.
* @param string $query The query string originally from the front end.
* @param bool $full_jp_logo_exists If there is a full Jetpack logo already on the page.
*
* @return array The JITM's to show, or an empty array if there is nothing to show
*/
public function get_messages( $message_path, $query, $full_jp_logo_exists ) {
// WooCommerce Services.
add_filter( 'jitm_woocommerce_services_msg', array( $this, 'jitm_woocommerce_services_msg' ) );
add_filter( 'jitm_jetpack_woo_services_install', array( $this, 'jitm_jetpack_woo_services_install' ) );
add_filter( 'jitm_jetpack_woo_services_activate', array( $this, 'jitm_jetpack_woo_services_activate' ) );
// Creative Mail.
add_filter( 'jitm_jetpack_creative_mail_install', array( $this, 'jitm_jetpack_creative_mail_install' ) );
add_filter( 'jitm_jetpack_creative_mail_activate', array( $this, 'jitm_jetpack_creative_mail_activate' ) );
// Jetpack Backup.
add_filter( 'jitm_jetpack_backup_install', array( $this, 'jitm_jetpack_backup_install' ) );
add_filter( 'jitm_jetpack_backup_activate', array( $this, 'jitm_jetpack_backup_activate' ) );
// Jetpack Boost.
add_filter( 'jitm_jetpack_boost_install', array( $this, 'jitm_jetpack_boost_install' ) );
add_filter( 'jitm_jetpack_boost_activate', array( $this, 'jitm_jetpack_boost_activate' ) );
$user = wp_get_current_user();
// Unauthenticated or invalid requests just bail.
if ( ! $user ) {
return array();
}
$user_roles = implode( ',', $user->roles );
$site_id = \Jetpack_Options::get_option( 'id' );
// Build our jitm request.
$path = add_query_arg(
array(
'external_user_id' => urlencode_deep( $user->ID ),
'user_roles' => urlencode_deep( $user_roles ),
'query_string' => urlencode_deep( $query ),
'mobile_browser' => Device_Detection::is_smartphone() ? 1 : 0,
'_locale' => get_user_locale(),
),
sprintf( '/sites/%d/jitm/%s', $site_id, $message_path )
);
// Attempt to get from cache.
$envelopes = get_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ) );
// If something is in the cache and it was put in the cache after the last sync we care about, use it.
$use_cache = false;
/**
* Filter to turn off jitm caching
*
* @since 1.1.0
* @since-jetpack 5.4.0
*
* @param bool true Whether to cache just in time messages
*/
if ( apply_filters( 'jetpack_just_in_time_msg_cache', true ) ) {
$use_cache = true;
}
if ( $use_cache ) {
$last_sync = (int) get_transient( 'jetpack_last_plugin_sync' );
$from_cache = $envelopes && $last_sync > 0 && $last_sync < $envelopes['last_response_time'];
} else {
$from_cache = false;
}
// Otherwise, ask again.
if ( ! $from_cache ) {
$wpcom_response = Client::wpcom_json_api_request_as_blog(
$path,
'2',
array(
'user_id' => $user->ID,
'user_roles' => implode( ',', $user->roles ),
),
null,
'wpcom'
);
// silently fail...might be helpful to track it?
if ( is_wp_error( $wpcom_response ) ) {
return array();
}
$envelopes = json_decode( $wpcom_response['body'] );
if ( ! is_array( $envelopes ) ) {
return array();
}
$expiration = isset( $envelopes[0] ) ? $envelopes[0]->ttl : 300;
// Do not cache if expiration is 0 or we're not using the cache.
if ( 0 !== $expiration && $use_cache ) {
$envelopes['last_response_time'] = time();
set_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ), $envelopes, $expiration );
}
}
$hidden_jitms = \Jetpack_Options::get_option( 'hide_jitm' );
unset( $envelopes['last_response_time'] );
/**
* Allow adding your own custom JITMs after a set of JITMs has been received.
*
* @since 1.1.0
* @since-jetpack 6.9.0
* @since-jetpack 8.3.0 - Added Message path.
*
* @param array $envelopes array of existing JITMs.
* @param string $message_path The message path to ask for.
*/
$envelopes = apply_filters( 'jetpack_jitm_received_envelopes', $envelopes, $message_path );
foreach ( $envelopes as $idx => &$envelope ) {
$dismissed_feature = isset( $hidden_jitms[ $envelope->feature_class ] ) && is_array( $hidden_jitms[ $envelope->feature_class ] ) ? $hidden_jitms[ $envelope->feature_class ] : null;
// If the this feature class has been dismissed and the request has not passed the ttl, skip it as it's been dismissed.
if ( is_array( $dismissed_feature ) && ( time() - $dismissed_feature['last_dismissal'] < $envelope->expires || $dismissed_feature['number'] >= $envelope->max_dismissal ) ) {
unset( $envelopes[ $idx ] );
continue;
}
$this->tracking->record_user_event(
'jitm_view_client',
array(
'jitm_id' => $envelope->id,
)
);
$url_params = array(
'u' => $user->ID,
);
// Get affiliate code and add it to the array of URL parameters.
$aff = Partner::init()->get_partner_code( Partner::AFFILIATE_CODE );
if ( '' !== $aff ) {
$url_params['aff'] = $aff;
}
// Check if the current user has connected their WP.com account
// and if not add this information to the the array of URL parameters.
if ( ! ( new Manager() )->is_user_connected( $user->ID ) ) {
$url_params['query'] = 'unlinked=1';
}
$envelope->url = esc_url( Redirect::get_url( "jitm-$envelope->id", $url_params ) );
$stats = new A8c_Mc_Stats();
$envelope->jitm_stats_url = $stats->build_stats_url( array( 'x_jetpack-jitm' => $envelope->id ) );
// phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
// $CTA is not valid per PHPCS, but it is part of the return from WordPress.com, so allowing.
if ( $envelope->CTA->hook ) {
$envelope->url = apply_filters( 'jitm_' . $envelope->CTA->hook, $envelope->url );
unset( $envelope->CTA->hook );
}
// phpcs:enable
if ( isset( $envelope->content->hook ) ) {
$envelope->content = apply_filters( 'jitm_' . $envelope->content->hook, $envelope->content );
unset( $envelope->content->hook );
}
// No point in showing an empty message.
if ( empty( $envelope->content->message ) ) {
unset( $envelopes[ $idx ] );
continue;
}
$envelope->content->icon = $this->generate_icon( $envelope->content->icon, $full_jp_logo_exists );
$stats->add( 'jitm', $envelope->id . '-viewed' );
$stats->do_server_side_stats();
}
return $envelopes;
}
}

View File

@ -0,0 +1,171 @@
<?php
/**
* Jetpack's Pre-Connection JITM class.
*
* @package automattic/jetpack-jitm
*/
namespace Automattic\Jetpack\JITMS;
/**
* Jetpack pre-connection just in time messaging through out the admin.
*/
class Pre_Connection_JITM extends JITM {
/**
* Filters and formats the messages for the client-side JS renderer
*
* @param string $message_path Current message path.
*
* @return array Formatted messages.
*/
private function filter_messages( $message_path ) {
/**
* Allows filtering of the pre-connection JITMs.
*
* This filter allows plugins to add pre-connection JITMs that will be
* displayed by the JITM package.
*
* @since 1.14.1
*
* @param array An array of pre-connection messages.
*/
$messages = apply_filters( 'jetpack_pre_connection_jitms', array() );
$messages = $this->validate_messages( $messages );
$formatted_messages = array();
foreach ( $messages as $message ) {
if ( ! preg_match( $message['message_path'], $message_path ) ) {
continue;
}
$obj = new \stdClass();
$obj->CTA = array( // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
'message' => $message['button_caption'],
'newWindow' => false,
);
$obj->url = $message['button_link'];
$obj->id = $message['id'];
$obj->is_dismissible = true;
$obj->content = array(
'message' => $message['message'],
'description' => $message['description'],
'list' => array(),
'icon' => $this->get_message_icon( $message ),
);
$formatted_messages[] = $obj;
}
return $formatted_messages;
}
/**
* Validates that each of the messages contains all of the required keys:
* - id
* - message_path
* - message
* - description
* - button_link
* - button_caption
*
* @param array $messages An array of JITM messages.
*
* @return array An array of JITM messages that contain all of the required keys.
*/
private function validate_messages( $messages ) {
if ( ! is_array( $messages ) ) {
return array();
}
$expected_keys = array_flip( array( 'id', 'message_path', 'message', 'description', 'button_link', 'button_caption' ) );
foreach ( $messages as $index => $message ) {
if ( count( array_intersect_key( $expected_keys, $message ) ) !== count( $expected_keys ) ) {
// Remove any messages that are missing expected keys.
unset( $messages[ $index ] );
}
}
return $messages;
}
/**
* Get the icon for the message.
*
* The message may contain an 'icon' key. If the value of the 'icon' key matches a supported icon (or empty string), the value is used.
* If the message does not contain an icon key or if the value does not match a supported icon, the Jetpack icon is used by default.
*
* @param array $message A pre-connection JITM.
*
* @return string The icon to use in the JITM.
*/
private function get_message_icon( $message ) {
// Default to the Jetpack icon.
$icon = 'jetpack';
if ( ! isset( $message['icon'] ) ) {
return $icon;
}
$supported_icons = $this->get_supported_icons();
if ( in_array( $message['icon'], $supported_icons, true ) ) {
// Only use the message icon if it's a supported icon or an empty string (for no icon).
$icon = $message['icon'];
}
return $icon;
}
/**
* Retrieve the current message to display keyed on query string and message path
*
* @param string $message_path The message path to ask for.
* @param string $query The query string originally from the front end. Unused in this subclass.
* @param bool $full_jp_logo_exists If there is a full Jetpack logo already on the page.
*
* @return array The JITMs to show, or an empty array if there is nothing to show
*/
public function get_messages( $message_path, $query, $full_jp_logo_exists ) {
if ( ! current_user_can( 'install_plugins' ) ) {
return array();
}
$messages = $this->filter_messages( $message_path );
if ( empty( $messages ) ) {
return array();
}
$hidden_jitms = \Jetpack_Options::get_option( 'hide_jitm' );
foreach ( $messages as $idx => &$envelope ) {
$dismissed_feature = isset( $hidden_jitms[ 'pre-connection-' . $envelope->id ] ) &&
is_array( $hidden_jitms[ 'pre-connection-' . $envelope->id ] ) ? $hidden_jitms[ 'pre-connection-' . $envelope->id ] : null;
if ( is_array( $dismissed_feature ) ) {
unset( $messages[ $idx ] );
continue;
}
$envelope->content['icon'] = $this->generate_icon( $envelope->content['icon'], $full_jp_logo_exists );
}
return $messages;
}
/**
* Dismisses a JITM ID so that it will no longer be shown.
*
* @param string $id The id of the JITM that was dismissed.
*
* @return bool Always true
*/
public function dismiss( $id ) {
$this->save_dismiss( 'pre-connection-' . $id );
return true;
}
}

View File

@ -0,0 +1,92 @@
<?php
/**
* JITM's REST API Endpoints
*
* @package automattic/jetpack-jitm
*/
namespace Automattic\Jetpack\JITMS;
use Automattic\Jetpack\Connection\REST_Connector;
use WP_REST_Server;
/**
* Register the JITM's REST API Endpoints and their callbacks.
*/
class Rest_Api_Endpoints {
/**
* Declare the JITM's REST API endpoints.
*/
public static function register_endpoints() {
register_rest_route(
'jetpack/v4',
'/jitm',
array(
'methods' => WP_REST_Server::READABLE,
'callback' => __CLASS__ . '::get_jitm_message',
'permission_callback' => '__return_true',
)
);
register_rest_route(
'jetpack/v4',
'/jitm',
array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => __CLASS__ . '::delete_jitm_message',
'permission_callback' => __CLASS__ . '::delete_jitm_message_permission_callback',
)
);
}
/**
* Asks for a jitm, unless they've been disabled, in which case it returns an empty array
*
* @param WP_REST_Request $request The request object.
*
* @return array An array of jitms
*/
public static function get_jitm_message( $request ) {
$jitm = JITM::get_instance();
if ( ! $jitm->jitms_enabled() ) {
return array();
}
return $jitm->get_messages( $request['message_path'], urldecode_deep( $request['query'] ), 'true' === $request['full_jp_logo_exists'] ? true : false );
}
/**
* Dismisses a jitm.
*
* @param WP_REST_Request $request The request object.
*
* @return bool Always True
*/
public static function delete_jitm_message( $request ) {
$jitm = JITM::get_instance();
if ( ! $jitm->jitms_enabled() ) {
return true;
}
return $jitm->dismiss( $request['id'], $request['feature_class'] );
}
/**
* Verify that the user can dismiss JITM messages.
*
* @return bool|WP_Error True if user is able to dismiss JITM messages.
*/
public static function delete_jitm_message_permission_callback() {
if ( current_user_can( 'read' ) ) {
return true;
}
return new \WP_Error( 'invalid_user_permission_jetpack_delete_jitm_message', REST_Connector::get_user_permissions_error_msg(), array( 'status' => rest_authorization_required_code() ) );
}
}

View File

@ -0,0 +1,494 @@
// Just in Time Messaging - message prompts
// TODO: Switch to using the `@automattic/jetpack-base-styles` package when its ready.
@import '../../plugins/jetpack/_inc/client/scss/functions/rem';
@import '../../plugins/jetpack/_inc/client/scss/variables/colors';
@import '../../plugins/jetpack/_inc/client/scss/mixins/breakpoints';
@import '../../plugins/jetpack/_inc/client/scss/calypso-colors';
@mixin clear-fix {
&:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
}
@mixin jitm-banner-color( $color ) {
border-left-color: $color;
.jitm-banner__icon {
color: $color;
}
.jitm-banner__icon-circle {
background-color: $color;
}
}
// New JITMS - modified calypso banner styles
$blue-grey-light: #f6f7f7;
$blue-medium-dark: #2271b1;
.jitm-button {
background: $blue-grey-light;
border-color: $blue-medium-dark;
border-style: solid;
border-width: 1px;
color: $blue-medium-dark;
cursor: pointer;
display: inline-block;
margin: 0;
outline: 0;
overflow: hidden;
font-size: 14px;
text-overflow: ellipsis;
text-decoration: none;
vertical-align: top;
box-sizing: border-box;
font-size: 14px;
border-radius: 4px;
padding: 7px 14px 9px;
-webkit-appearance: none;
appearance: none;
text-align: center;
min-width: 90px;
&:hover {
background: #f0f0f1;
border-color: $blue-grey-dark;
color: $blue-grey-dark;
}
&[disabled],
&:disabled {
color: lighten( $gray, 30% );
background: $white;
border-color: lighten( $gray, 30% );
cursor: default;
}
&:focus {
background: $white;
border-color: $blue-medium-dark;
box-shadow: 0 0 0 1px $blue-medium-dark;
}
&.is-compact {
padding: 7px;
font-size: 11px;
line-height: 1;
text-transform: uppercase;
white-space: nowrap;
&:disabled {
color: lighten( $gray, 30% );
}
.gridicon {
top: 4px;
margin-top: -8px;
}
// Make the left margin of the small plus icon visually less huge
.gridicons-plus-small {
margin-left: -4px;
}
// Reset the left margin if the button contains only the plus icon
.gridicons-plus-small:last-of-type {
margin-left: 0;
}
// Make plus icon nudged closer to adjacent icons for add-people and add-plugin type buttons
.gridicons-plus-small + .gridicon {
margin-left: -4px;
}
}
&.hidden {
display: none;
}
}
// Primary buttons
.jitm-button.is-primary {
background: $blue-medium;
border-color: $blue-medium;
color: $white;
&:hover,
&:focus {
border-color: $blue-medium-dark;
background: $blue-medium-dark;
color: $white;
}
&:focus {
box-shadow:
0 0 0 1px $white,
0 0 0 3px $blue-medium-dark;
}
&[disabled],
&:disabled {
background: tint( $blue-light, 50% );
border-color: tint( $blue-wordpress, 55% );
color: $white;
}
&.is-compact {
color: $white;
white-space: nowrap;
}
}
.jitm-card {
display: block;
clear: both;
position: relative;
margin: rem( 48px ) rem( 20px ) 0 auto;
padding: rem( 16px );
box-sizing: border-box;
background: $white;
box-shadow:
0 0 0 1px $light-gray-700,
0 1px 1px 1px rgba(0,0,0,.04);
@include clear-fix;
@include breakpoint( ">480px" ) {
margin-bottom: rem( 16px );
padding: rem( 24px );
}
// Compact Card
&.is-compact {
margin-bottom: rem( 1px );
@include breakpoint( ">480px" ) {
margin-bottom: 1px;
padding: rem( 16px ) rem( 24px );
}
}
&.is-card-link {
padding-right: rem( 48px );
}
}
// Minor adjustments for the display in My Jetpack.
.my-jetpack-jitm-card {
.jitm-card {
margin-right: 0;
margin-bottom: 0;
}
}
// if JITM appears directly below WordPress "help" menu adjust margins
#screen-meta-links+.jitm-card {
margin: rem( 40px ) 1.5385em 0 auto;
}
// if JITM appears directly below WordPress hello dolly adjust margins
#dolly+.jitm-card {
margin: 3rem 1rem 0 auto;
}
// remove right margin for jitms in the editor
.post-php .jitm-card {
margin-right: 0;
}
// if JITM appears inside of the jetpack dashboard adjust margins
.jp-lower .jitm-card {
margin: 0 0 rem( 24px );
}
.jitm-banner.jitm-card {
border-left: 4px solid;
display: flex;
padding: rem( 12px ) rem( 6px ) rem( 12px ) rem( 12px );
position: relative;
z-index: 2;
@include breakpoint( "<480px" ) {
display: flex;
padding: rem( 12px );
flex-direction: column;
}
&.is-card-link {
padding: rem( 12px ) rem( 48px ) rem( 12px ) rem( 16px );
}
&.is-dismissible {
padding-right: rem( 48px );
}
@include jitm-banner-color( $alert-green );
&.is-upgrade-personal {
@include jitm-banner-color( $alert-yellow );
}
&.is-upgrade-premium {
@include jitm-banner-color( $alert-green );
}
&.is-upgrade-business,
&.woo-jitm {
@include jitm-banner-color( $alert-purple );
}
.jitm-card__link-indicator {
align-items: center;
color: $blue-wordpress;
display: flex;
}
&:hover {
transition: all 100ms ease-in-out;
&.is-card-link {
box-shadow: 0 0 0 1px $gray, 0 2px 4px lighten( $gray, 20% );
}
.jitm-card__link-indicator {
color: $blue-dark;
}
}
@include breakpoint( ">480px" ) {
padding: rem( 12px ) rem( 16px );
&.is-dismissible {
padding-right: rem( 16px );
}
}
}
.jitm-banner__buttons_container {
display: grid;
height: 50%;
margin-top: auto;
margin-bottom: auto;
@include breakpoint( ">480px" ) {
display: flex;
}
}
.jitm-banner__icons {
display: flex;
.jitm-banner__icon,
.jitm-banner__icon-circle {
border-radius: 50%;
flex-shrink: 0;
height: rem( 24px );
width: rem( 24px );
margin-right: rem( 16px );
margin-top: rem( -2px );
text-align: center;
top: rem( 4px );
}
.jitm-banner__icon {
align-self: center;
color: $white;
display: block;
}
.jitm-banner__icon-circle {
color: white;
display: none;
padding: rem( 3px ) rem( 4px ) rem( 4px ) rem( 3px );
}
@include breakpoint( ">480px" ) {
align-items: center;
.jitm-banner__icon {
display: none;
}
.jitm-banner__icon-circle {
display: block;
}
}
}
.jitm-banner__icon-plan {
display: flex;
margin-right: rem( 16px );
.dops-plan-icon {
height: rem( 32px );
width: rem( 32px );
}
.jp-emblem {
position: relative;
top: rem( 2px );
@include breakpoint( "<480px" ) {
margin-bottom: rem( 12px );
}
svg {
height: rem( 32px );
width: rem( 32px );
fill: $green-primary;
}
.jitm-jp-logo {
height: inherit;
width: 6rem;
fill: inherit;
}
}
@include breakpoint( ">480px" ) {
align-items: center;
}
@include breakpoint( "<960px" ) {
margin-bottom: 10px;
}
}
.jitm-banner__content {
align-items: center;
display: flex;
flex-grow: 1;
flex-wrap: wrap;
@include breakpoint( "<480px" ) {
margin-right: 0;
}
@include breakpoint( ">480px" ) {
flex-wrap: nowrap;
}
@include breakpoint( "<960px" ) {
display: grid;
margin-right: 5px;
}
}
.jitm-banner__info {
flex-grow: 1;
line-height: 1.4;
@include breakpoint( ">480px" ) {
flex-basis: 50%;
}
@include breakpoint( ">960px" ) {
flex-basis: 70%;
}
.jitm-banner__title,
.jitm-banner__description {
color: $gray-dark;
}
.jitm-banner__title {
font-size: 14px;
font-weight: 500;
}
.jitm-banner__description {
font-size: rem( 12px );
line-height: 1.5;
margin-top: rem( 6px );
}
.banner__list {
font-size: 12px;
list-style: none;
margin: 10px 0;
li {
margin: 6px 0;
.gridicon {
fill: $gray;
display: inline;
margin-right: 12px;
vertical-align: bottom;
}
}
}
}
.jitm-banner__action {
align-self: center;
font-size: rem( 12px );
margin: rem( 8px ) 0 0;
text-align: left;
width: 100%;
.jitm-banner__prices {
display: flex;
justify-content: flex-start;
.dops-plan-price {
margin-bottom: 0;
}
.dops-plan-price.is-discounted,
.dops-plan-price.is-discounted .dops-plan-price__currency-symbol {
color: $gray-dark;
}
.has-call-to-action & .dops-plan-price {
margin-bottom: rem( 8px );
}
}
@include breakpoint( "<480px" ) {
margin-top: 1rem;
}
@include breakpoint( ">480px" ) {
margin: 0 rem( 4px ) 0 rem( 8px );
text-align: center;
width: auto;
.is-dismissible {
margin-top: rem( 40px );
}
.jitm-banner__prices {
justify-content: flex-end;
text-align: right;
}
}
}
.jitm-banner__dismiss {
display: block;
text-decoration: none;
line-height: .5;
margin-top: auto;
margin-bottom: auto;
&:before {
color: darken($gray, 20%);
font: 400 16px/1 dashicons;
content: '\f158';
}
@include breakpoint( ">660px" ) {
margin-right: rem( -8px );
}
@include breakpoint( "<480px" ) {
position: absolute;
top: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
margin: 0;
// Minimum touch area
width: 48px;
height: 48px;
}
}
.jitm-banner__action + .jitm-banner__dismiss {
margin-left: rem( 10px );
}
#dolly + .jitm-card {
margin: 3rem 1rem 0 auto;
}

View File

@ -0,0 +1,269 @@
import '../css/jetpack-admin-jitm.scss';
jQuery( document ).ready( function ( $ ) {
var templates = {
default: function ( envelope ) {
var html =
'<div class="jitm-card jitm-banner ' +
( envelope.CTA.message ? 'has-call-to-action' : '' ) +
' is-upgrade-premium ' +
envelope.content.classes +
'" data-stats_url="' +
envelope.jitm_stats_url +
'">';
html += '<div class="jitm-banner__content">';
html += '<div class="jitm-banner__icon-plan">' + envelope.content.icon + '</div>';
html += '<div class="jitm-banner__info">';
html += '<div class="jitm-banner__title">' + envelope.content.message + '</div>';
if ( envelope.content.description && envelope.content.description !== '' ) {
html += '<div class="jitm-banner__description">' + envelope.content.description;
if ( envelope.content.list.length > 0 ) {
html += '<ul class="banner__list">';
for ( var i = 0; i < envelope.content.list.length; i++ ) {
var text = envelope.content.list[ i ].item;
if ( envelope.content.list[ i ].url ) {
text =
'<a href="' +
envelope.content.list[ i ].url +
'" target="_blank" rel="noopener noreferrer" data-module="' +
envelope.feature_class +
'" data-jptracks-name="nudge_item_click" data-jptracks-prop="jitm-' +
envelope.id +
'">' +
text +
'</a>';
}
html +=
'<li>' +
'<svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g>' +
'<path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414" /></g></svg>' +
text +
'</li>';
}
}
html += '</div>';
}
html += '</div>';
html += '</div>';
html += '<div class="jitm-banner__buttons_container">';
if ( envelope.activate_module ) {
html += '<div class="jitm-banner__action" id="jitm-banner__activate">';
html +=
'<a href="#" data-module="' +
envelope.activate_module +
'" type="button" class="jitm-button is-compact is-primary jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-' +
envelope.id +
'-activate_module">' +
window.jitm_config.activate_module_text +
'</a>';
html += '</div>';
}
if ( envelope.CTA.message ) {
var ctaClasses = 'jitm-button is-compact jptracks';
if ( envelope.CTA.primary && null === envelope.activate_module ) {
ctaClasses += ' is-primary';
}
var ajaxAction = envelope.CTA.ajax_action;
html += '<div class="jitm-banner__action">';
html +=
'<a href="' +
( envelope.CTA.hasOwnProperty( 'link' ) && envelope.CTA.link.length
? envelope.CTA.link
: envelope.url ) +
'" target="' +
( envelope.CTA.newWindow === false || ajaxAction ? '_self' : '_blank' ) +
'" rel="noopener noreferrer" title="' +
envelope.CTA.message +
'" data-module="' +
envelope.feature_class +
'" type="button" class="' +
ctaClasses +
'" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-' +
envelope.id +
'" ' +
( ajaxAction ? 'data-ajax-action="' + ajaxAction + '"' : '' ) +
'>' +
envelope.CTA.message +
'</a>';
html += '</div>';
}
html += '</div>';
if ( envelope.is_dismissible ) {
html +=
'<a href="#" data-module="' +
envelope.feature_class +
'" class="jitm-banner__dismiss"></a>';
}
html += '</div>';
return $( html );
},
};
var setJITMContent = function ( $el, response, redirect ) {
var template;
var render = function ( $my_template ) {
return function ( e ) {
e.preventDefault();
$my_template.hide();
$.ajax( {
url: window.jitm_config.api_root + 'jetpack/v4/jitm',
method: 'POST', // using DELETE without permalinks is broken in default nginx configuration
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', window.jitm_config.nonce );
},
data: {
id: response.id,
feature_class: response.feature_class,
},
} );
};
};
template = response.template;
// if we don't have a template for this version, just use the default template
if ( ! template || ! templates[ template ] ) {
template = 'default';
}
response.url = response.url + '&redirect=' + redirect;
var $template = templates[ template ]( response );
$template.find( '.jitm-banner__dismiss' ).on( 'click', render( $template ) );
if ( $( '#jp-admin-notices' ).length > 0 ) {
// Add to Jetpack notices within the Jetpack settings app.
$el.innerHTML = $template;
// If we already have a message, replace it.
if ( $( '#jp-admin-notices' ).find( '.jitm-card' ) ) {
$( '.jitm-card' ).replaceWith( $template );
}
// No existing JITM? Add ours to the top of the Jetpack admin notices.
$template.prependTo( $( '#jp-admin-notices' ) );
} else {
// Replace placeholder div on other pages.
$el.replaceWith( $template );
}
// Handle Module activation button if it exists.
$template.find( '#jitm-banner__activate a' ).on( 'click', function () {
var $activate_button = $( this );
// Do not allow any requests if the button is disabled.
if ( $activate_button.attr( 'disabled' ) ) {
return false;
}
// Make request to activate module.
$.ajax( {
url:
window.jitm_config.api_root +
'jetpack/v4/module/' +
$activate_button.data( 'module' ) +
'/active',
method: 'POST',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', $el.data( 'nonce' ) );
// Change the button status to disabled as the change is in progress.
$( '#jitm-banner__activate a' ).text( window.jitm_config.activating_module_text );
$( '#jitm-banner__activate a' ).attr( 'disabled', true );
},
} ).done( function () {
$( '#jitm-banner__activate a' ).text( window.jitm_config.activated_module_text );
$( '#jitm-banner__activate a' ).attr( 'disabled', true );
// Hide the JITM after 2 seconds.
setTimeout( function () {
$template.fadeOut( 'slow' );
}, 2000 );
} );
} );
// Handle CTA ajax actions.
$template.find( '.jitm-button[data-ajax-action]' ).on( 'click', function ( e ) {
e.preventDefault();
var button = $( this );
button.attr( 'disabled', true );
$.post( window.ajaxurl, {
action: button.data( 'ajax-action' ),
_nonce: $el.data( 'ajax-nonce' ),
} )
.done( function () {
$template.fadeOut( 'slow' );
} )
.fail( function () {
button.attr( 'disabled', false );
} );
return false;
} );
};
var reFetch = function () {
$( '.jetpack-jitm-message' ).each( function () {
var $el = $( this );
var message_path = $el.data( 'message-path' );
var query = $el.data( 'query' );
var redirect = $el.data( 'redirect' );
var hash = location.hash;
hash = hash.replace( /#\//, '_' );
if ( '_dashboard' !== hash ) {
message_path = message_path.replace(
'toplevel_page_jetpack',
'toplevel_page_jetpack' + hash
);
}
var full_jp_logo_exists = $( '.jetpack-logo__masthead' ).length ? true : false;
$.get( window.jitm_config.api_root + 'jetpack/v4/jitm', {
message_path: message_path,
query: query,
full_jp_logo_exists: full_jp_logo_exists,
_wpnonce: $el.data( 'nonce' ),
} ).then( function ( response ) {
if ( 'object' === typeof response && response[ '1' ] ) {
response = [ response[ '1' ] ];
}
// properly handle the case of an empty array or no content set
if ( 0 === response.length || ! response[ 0 ].content ) {
return;
}
// for now, always take the first response
setJITMContent( $el, response[ 0 ], redirect );
} );
} );
};
reFetch();
$( window ).on( 'hashchange', function ( e ) {
var newURL = e.originalEvent.newURL;
if ( newURL.indexOf( 'jetpack#/' ) >= 0 ) {
var jitm_card = document.querySelector( '.jitm-card' );
if ( jitm_card ) {
jitm_card.remove();
}
reFetch();
}
} );
} );

View File

@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.7.8] - 2022-08-29
### Changed
- Updated package dependencies.
## [1.7.7] - 2022-08-23
### Changed
- Updated package dependencies. [#25628]
## [1.7.6] - 2022-08-03
### Changed
- Updated package dependencies. [#25300, #25315]
## [1.7.5] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
@ -194,6 +206,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Licensing: Add support for Jetpack licenses
[1.7.8]: https://github.com/Automattic/jetpack-licensing/compare/v1.7.7...v1.7.8
[1.7.7]: https://github.com/Automattic/jetpack-licensing/compare/v1.7.6...v1.7.7
[1.7.6]: https://github.com/Automattic/jetpack-licensing/compare/v1.7.5...v1.7.6
[1.7.5]: https://github.com/Automattic/jetpack-licensing/compare/v1.7.4...v1.7.5
[1.7.4]: https://github.com/Automattic/jetpack-licensing/compare/v1.7.3...v1.7.4
[1.7.3]: https://github.com/Automattic/jetpack-licensing/compare/v1.7.2...v1.7.3

View File

@ -4,7 +4,7 @@
"type": "jetpack-library",
"license": "GPL-2.0-or-later",
"require": {
"automattic/jetpack-connection": "^1.41"
"automattic/jetpack-connection": "^1.44"
},
"require-dev": {
"automattic/wordbless": "@dev",

View File

@ -5,6 +5,37 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.0.3] - 2022-08-29
### Changed
- Updated package dependencies.
## [2.0.2] - 2022-08-25
### Changed
- Activate plugins in normal mode to trigger plugin_activated hooks [#25727]
- Updated package dependencies. [#25814]
### Fixed
- Licensing: do not enable the Licensing UI if My Jetpack cannot be enabled. [#25667]
- Search: increased search plan/pricing API timeouts to 5s [#25775]
## [2.0.1] - 2022-08-23
### Added
- My Jetpack: Add container for JITMs [#22452]
### Changed
- Updated package dependencies. [#25338, #25339, #25377, #25422, #25628, #25762, #25764]
## [2.0.0] - 2022-08-09
### Added
- Make product cards compatible with disclaimers and add disclaimer for backup card [#25265]
### Changed
- Search: changed to only require site level connection [#24477]
## [1.8.3] - 2022-08-03
### Changed
- Updated package dependencies. [#25300, #25315]
## [1.8.2] - 2022-07-27
### Changed
- My Jetpack: changed link used in ProductCard component to a button when the plugin is absent
@ -548,6 +579,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Created package
[2.0.3]: https://github.com/Automattic/jetpack-my-jetpack/compare/2.0.2...2.0.3
[2.0.2]: https://github.com/Automattic/jetpack-my-jetpack/compare/2.0.1...2.0.2
[2.0.1]: https://github.com/Automattic/jetpack-my-jetpack/compare/2.0.0...2.0.1
[2.0.0]: https://github.com/Automattic/jetpack-my-jetpack/compare/1.8.3...2.0.0
[1.8.3]: https://github.com/Automattic/jetpack-my-jetpack/compare/1.8.2...1.8.3
[1.8.2]: https://github.com/Automattic/jetpack-my-jetpack/compare/1.8.1...1.8.2
[1.8.1]: https://github.com/Automattic/jetpack-my-jetpack/compare/1.8.0...1.8.1
[1.8.0]: https://github.com/Automattic/jetpack-my-jetpack/compare/1.7.4...1.8.0

View File

@ -1 +1 @@
<?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => 'acd7f9241cf1f9ee3a32');
<?php return array('dependencies' => array('react', 'react-dom', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-primitives', 'wp-url'), 'version' => 'ef234302efce2d8f505a');

View File

@ -6,9 +6,10 @@
"require": {
"automattic/jetpack-admin-ui": "^0.2",
"automattic/jetpack-assets": "^1.17",
"automattic/jetpack-connection": "^1.41",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-jitm": "^2.2",
"automattic/jetpack-licensing": "^1.7",
"automattic/jetpack-plugins-installer": "^0.1",
"automattic/jetpack-plugins-installer": "^0.2",
"automattic/jetpack-redirect": "^1.7",
"automattic/jetpack-constants": "^1.6"
},
@ -63,7 +64,7 @@
"link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}"
},
"branch-alias": {
"dev-trunk": "1.8.x-dev"
"dev-trunk": "2.0.x-dev"
},
"version-constants": {
"::PACKAGE_VERSION": "src/class-initializer.php"

View File

@ -13,6 +13,7 @@ use Automattic\Jetpack\Connection\Client as Client;
use Automattic\Jetpack\Connection\Initial_State as Connection_Initial_State;
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
use Automattic\Jetpack\Connection\Rest_Authentication as Connection_Rest_Authentication;
use Automattic\Jetpack\JITMS\JITM as JITM;
use Automattic\Jetpack\Licensing;
use Automattic\Jetpack\Status as Status;
use Automattic\Jetpack\Terms_Of_Service;
@ -28,7 +29,7 @@ class Initializer {
*
* @var string
*/
const PACKAGE_VERSION = '1.8.2';
const PACKAGE_VERSION = '2.0.3';
/**
* Initialize My Jetapack
@ -64,6 +65,9 @@ class Initializer {
add_action( 'load-' . $page_suffix, array( __CLASS__, 'admin_init' ) );
// Sets up JITMS.
JITM::configure();
/**
* Fires after the My Jetpack package is initialized
*
@ -80,6 +84,17 @@ class Initializer {
* @return boolean
*/
public static function is_licensing_ui_enabled() {
// Default changed to true in 1.5.0.
$is_enabled = true;
/*
* Bail if My Jetpack is not enabled,
* and thus the licensing UI shouldn't be enabled either.
*/
if ( ! self::should_initialize() ) {
$is_enabled = false;
}
/**
* Acts as a feature flag, returning a boolean for whether we should show the licensing UI.
*
@ -90,7 +105,7 @@ class Initializer {
*/
return apply_filters(
'jetpack_my_jetpack_should_enable_add_license_screen',
true
$is_enabled
);
}

View File

@ -89,11 +89,26 @@ class Backup extends Hybrid_Product {
return array(
_x( 'Real-time cloud backups', 'Backup Product Feature', 'jetpack-my-jetpack' ),
_x( '10GB of backup storage', 'Backup Product Feature', 'jetpack-my-jetpack' ),
_x( '30-day archive & activity log', 'Backup Product Feature', 'jetpack-my-jetpack' ),
_x( '30-day archive & activity log*', 'Backup Product Feature', 'jetpack-my-jetpack' ),
_x( 'One-click restores', 'Backup Product Feature', 'jetpack-my-jetpack' ),
);
}
/**
* Get disclaimers corresponding to a feature
*
* @return array Backup disclaimers list
*/
public static function get_disclaimers() {
return array(
array(
'text' => _x( '* Subject to your usage and storage limit.', 'Backup Product Disclaimer', 'jetpack-my-jetpack' ),
'link_text' => _x( 'Learn more', 'Backup Product Disclaimer', 'jetpack-my-jetpack' ),
'url' => Redirect::get_url( 'jetpack-faq-backup-disclaimer' ),
),
);
}
/**
* Get the WPCOM product slug used to make the purchase
*

View File

@ -135,9 +135,6 @@ class Extras extends Product {
* @return null|WP_Error Null on success, WP_Error on invalid file.
*/
public static function activate_plugin() {
/*
* Silent mode True to avoid redirect
*/
return activate_plugin( static::get_installed_plugin_filename( 'jetpack' ), '', false, true );
return activate_plugin( static::get_installed_plugin_filename( 'jetpack' ) );
}
}

View File

@ -69,11 +69,9 @@ abstract class Hybrid_Product extends Product {
public static function activate_plugin() {
/*
* Activate self-installed plugin if it's installed.
* Silent mode True to avoid redirects in Backup.
* @TODO When new Hybrid products are added, we might not want to go silent with all of them.
*/
if ( parent::is_plugin_installed() ) {
return activate_plugin( static::get_installed_plugin_filename(), '', false, true );
return activate_plugin( static::get_installed_plugin_filename() );
}
/*

View File

@ -118,6 +118,7 @@ abstract class Product {
'description' => static::get_description(),
'long_description' => static::get_long_description(),
'features' => static::get_features(),
'disclaimers' => static::get_disclaimers(),
'status' => static::get_status(),
'pricing_for_ui' => static::get_pricing_for_ui(),
'is_bundle' => static::is_bundle_product(),
@ -199,6 +200,15 @@ abstract class Product {
return null;
}
/**
* Get the disclaimers corresponding to a feature
*
* @return ?array
*/
public static function get_disclaimers() {
return array();
}
/**
* Checks whether the current plan (or purchases) of the site already supports the product
*

View File

@ -51,6 +51,13 @@ class Search extends Hybrid_Product {
'jetpack-search-dev/jetpack-search.php',
);
/**
* Search only requires site connection
*
* @var boolean
*/
public static $requires_user_connection = false;
/**
* Get the internationalized product name
*
@ -153,10 +160,10 @@ class Search extends Hybrid_Product {
$response = wp_remote_get(
sprintf( Constants::get_constant( 'JETPACK__WPCOM_JSON_API_BASE' ) . '/wpcom/v2/jetpack-search/pricing?record_count=%1$d&locale=%2$s', $record_count, get_user_locale() ),
array( 'timeout' => 2 )
array( 'timeout' => 5 )
);
if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
return new WP_Error( 'search_pricing_fetch_failed' );
}
@ -184,12 +191,12 @@ class Search extends Hybrid_Product {
$response = Client::wpcom_json_api_request_as_blog(
'/sites/' . $blog_id . '/jetpack-search/plan',
'2',
array( 'timeout' => 2 ),
array( 'timeout' => 5 ),
null,
'wpcom'
);
if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
return new WP_Error( 'search_state_fetch_failed' );
}

View File

@ -0,0 +1,224 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.7.15] - 2022-08-29
### Changed
- Updated package dependencies.
## [1.7.14] - 2022-08-23
### Changed
- Updated package dependencies. [#25628]
## [1.7.13] - 2022-08-03
### Changed
- Updated package dependencies. [#25300, #25315]
## [1.7.12] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
## [1.7.11] - 2022-06-21
### Changed
- Renaming master to trunk. [#24661]
## [1.7.10] - 2022-06-14
### Changed
- Updated package dependencies. [#24529]
## [1.7.9] - 2022-05-18
### Fixed
- Fix new PHPCS sniffs. [#24366]
## [1.7.8] - 2022-05-04
### Changed
- Updated package dependencies. [#24095]
### Deprecated
- Moved the options class into Connection. [#24095]
## [1.7.7] - 2022-04-26
### Changed
- Updated package dependencies.
## [1.7.6] - 2022-04-19
### Changed
- PHPCS: Fix `WordPress.Security.ValidatedSanitizedInput`
## [1.7.5] - 2022-04-12
### Changed
- Updated package dependencies.
## [1.7.4] - 2022-04-06
### Changed
- Updated package dependencies.
## [1.7.3] - 2022-03-29
### Changed
- Microperformance: Use === null instead of is_null
## [1.7.2] - 2022-03-02
### Changed
- Updated package dependencies.
## [1.7.1] - 2022-02-22
### Changed
- Updated package dependencies.
## [1.7.0] - 2022-02-16
### Added
- Added the ability to specify a partner logo for each supported partner
- Remotely check if partner coupon looks valid
## [1.6.4] - 2022-01-25
### Changed
- Updated package dependencies.
## [1.6.3] - 2022-01-18
### Changed
- Updated package dependencies.
## [1.6.2] - 2022-01-04
### Changed
- Switch to pcov for code coverage.
- Updated package dependencies
## [1.6.1] - 2021-12-14
### Changed
- Updated package dependencies.
## [1.6.0] - 2021-11-30
### Added
- Addde partner coupon logic
## [1.5.7] - 2021-11-23
### Changed
- Updated package dependencies
## [1.5.6] - 2021-11-02
### Changed
- Set `convertDeprecationsToExceptions` true in PHPUnit config.
- Update PHPUnit configs to include just what needs coverage rather than include everything then try to exclude stuff that doesn't.
## [1.5.5] - 2021-10-19
### Changed
- Updated package dependencies.
## [1.5.4] - 2021-10-12
### Changed
- Updated package dependencies
## [1.5.3] - 2021-09-28
### Changed
- Updated package dependencies.
## [1.5.2] - 2021-08-31
### Changed
- Run composer update on test-php command instead of phpunit.
- Tests: update PHPUnit polyfills dependency (yoast/phpunit-polyfills).
- update annotations versions.
## [1.5.1] - 2021-05-25
### Changed
- Updated package dependencies.
## [1.5.0] - 2021-04-27
### Added
- Adds segmentation "from" parameter to the registration flow
## [1.4.3] - 2021-03-30
### Added
- Composer alias for dev-master, to improve dependencies
### Changed
- Update package dependencies.
### Fixed
- Use `composer update` rather than `install` in scripts, as composer.lock isn't checked in.
## [1.4.2] - 2021-02-05
- CI: Make tests more generic
## [1.4.1] - 2021-01-20
- Add mirror-repo information to all current composer packages
- Monorepo: Reorganize all projects
## [1.4.0] - 2020-12-14
- Update dependency brain/monkey to v2.6.0
- Pin dependencies
- Packages: Update for PHP 8 testing
## [1.3.1] - 2020-10-29
- Update dependency brain/monkey to v2.5.0
- Updated PHPCS: Packages and Debugger
## [1.3.0] - 2020-08-25
- Update Authorize URL iframe to include affiliate code
- Packages: Update filenames after #16810
- CI: Try collect js coverage
- Docker: Add package testing shortcut
## [1.2.0] - 2020-07-01
- Package Unit tests: update test file names to make sure they runs in Travis
## [1.1.0] - 2020-06-22
- PHPCS: Clean up the packages
- PHPCS Updates after WPCS 2.3
- Update README.md on partner package
## [1.0.1] - 2020-01-27
- Pin dependency brain/monkey to 2.4.0
## 1.0.0 - 2019-12-16
- Add partner subsidiary id to upgrade URLs.
[1.7.15]: https://github.com/Automattic/jetpack-partner/compare/v1.7.14...v1.7.15
[1.7.14]: https://github.com/Automattic/jetpack-partner/compare/v1.7.13...v1.7.14
[1.7.13]: https://github.com/Automattic/jetpack-partner/compare/v1.7.12...v1.7.13
[1.7.12]: https://github.com/Automattic/jetpack-partner/compare/v1.7.11...v1.7.12
[1.7.11]: https://github.com/Automattic/jetpack-partner/compare/v1.7.10...v1.7.11
[1.7.10]: https://github.com/Automattic/jetpack-partner/compare/v1.7.9...v1.7.10
[1.7.9]: https://github.com/Automattic/jetpack-partner/compare/v1.7.8...v1.7.9
[1.7.8]: https://github.com/Automattic/jetpack-partner/compare/v1.7.7...v1.7.8
[1.7.7]: https://github.com/Automattic/jetpack-partner/compare/v1.7.6...v1.7.7
[1.7.6]: https://github.com/Automattic/jetpack-partner/compare/v1.7.5...v1.7.6
[1.7.5]: https://github.com/Automattic/jetpack-partner/compare/v1.7.4...v1.7.5
[1.7.4]: https://github.com/Automattic/jetpack-partner/compare/v1.7.3...v1.7.4
[1.7.3]: https://github.com/Automattic/jetpack-partner/compare/v1.7.2...v1.7.3
[1.7.2]: https://github.com/Automattic/jetpack-partner/compare/v1.7.1...v1.7.2
[1.7.1]: https://github.com/Automattic/jetpack-partner/compare/v1.7.0...v1.7.1
[1.7.0]: https://github.com/Automattic/jetpack-partner/compare/v1.6.4...v1.7.0
[1.6.4]: https://github.com/Automattic/jetpack-partner/compare/v1.6.3...v1.6.4
[1.6.3]: https://github.com/Automattic/jetpack-partner/compare/v1.6.2...v1.6.3
[1.6.2]: https://github.com/Automattic/jetpack-partner/compare/v1.6.1...v1.6.2
[1.6.1]: https://github.com/Automattic/jetpack-partner/compare/v1.6.0...v1.6.1
[1.6.0]: https://github.com/Automattic/jetpack-partner/compare/v1.5.7...v1.6.0
[1.5.7]: https://github.com/Automattic/jetpack-partner/compare/v1.5.6...v1.5.7
[1.5.6]: https://github.com/Automattic/jetpack-partner/compare/v1.5.5...v1.5.6
[1.5.5]: https://github.com/Automattic/jetpack-partner/compare/v1.5.4...v1.5.5
[1.5.4]: https://github.com/Automattic/jetpack-partner/compare/v1.5.3...v1.5.4
[1.5.3]: https://github.com/Automattic/jetpack-partner/compare/v1.5.2...v1.5.3
[1.5.2]: https://github.com/Automattic/jetpack-partner/compare/v1.5.1...v1.5.2
[1.5.1]: https://github.com/Automattic/jetpack-partner/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/Automattic/jetpack-partner/compare/v1.4.3...v1.5.0
[1.4.3]: https://github.com/Automattic/jetpack-partner/compare/v1.4.2...v1.4.3
[1.4.2]: https://github.com/Automattic/jetpack-partner/compare/v1.4.1...v1.4.2
[1.4.1]: https://github.com/Automattic/jetpack-partner/compare/v1.4.0...v1.4.1
[1.4.0]: https://github.com/Automattic/jetpack-partner/compare/v1.3.1...v1.4.0
[1.3.1]: https://github.com/Automattic/jetpack-partner/compare/v1.3.0...v1.3.1
[1.3.0]: https://github.com/Automattic/jetpack-partner/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/Automattic/jetpack-partner/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/Automattic/jetpack-partner/compare/v1.0.1...v1.1.0
[1.0.1]: https://github.com/Automattic/jetpack-partner/compare/v1.0.0...v1.0.1

View File

@ -0,0 +1,357 @@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -0,0 +1,38 @@
# Security Policy
Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/).
## Supported Versions
Generally, only the latest version of Jetpack has continued support. If a critical vulnerability is found in the current version of Jetpack, we may opt to backport any patches to previous versions.
## Reporting a Vulnerability
[Jetpack](https://jetpack.com/) is an open-source plugin for WordPress. Our HackerOne program covers the plugin software, as well as a variety of related projects and infrastructure.
**For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.**
Our most critical targets are:
* Jetpack and the Jetpack composer packages (all within this repo)
* Jetpack.com -- the primary marketing site.
* cloud.jetpack.com -- a management site.
* wordpress.com -- the shared management site for both Jetpack and WordPress.com sites.
For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic).
_Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._
## Guidelines
We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines:
* Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines).
* Pen-testing Production:
* Please **setup a local environment** instead whenever possible. Most of our code is open source (see above).
* If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC.
* **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels.
* To be eligible for a bounty, all of these guidelines must be followed.
* Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability.
We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties.

View File

@ -0,0 +1,50 @@
{
"name": "automattic/jetpack-partner",
"description": "Support functions for Jetpack hosting partners.",
"type": "jetpack-library",
"license": "GPL-2.0-or-later",
"require": {
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-status": "^1.14"
},
"require-dev": {
"brain/monkey": "2.6.1",
"yoast/phpunit-polyfills": "1.0.3",
"automattic/jetpack-changelogger": "^3.2",
"automattic/wordbless": "@dev"
},
"autoload": {
"classmap": [
"src/"
]
},
"scripts": {
"phpunit": [
"./vendor/phpunit/phpunit/phpunit --colors=always"
],
"post-update-cmd": "php -r \"copy('vendor/automattic/wordbless/src/dbless-wpdb.php', 'wordpress/wp-content/db.php');\"",
"test-coverage": [
"php -dpcov.directory=. ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\""
],
"test-php": [
"@composer phpunit"
]
},
"minimum-stability": "dev",
"prefer-stable": true,
"extra": {
"autotagger": true,
"mirror-repo": "Automattic/jetpack-partner",
"changelogger": {
"link-template": "https://github.com/Automattic/jetpack-partner/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.7.x-dev"
}
},
"config": {
"allow-plugins": {
"roots/wordpress-core-installer": true
}
}
}

View File

@ -0,0 +1,464 @@
<?php
/**
* Class for the Jetpack partner coupon logic.
*
* @package automattic/jetpack-partner
*/
namespace Automattic\Jetpack;
use Automattic\Jetpack\Connection\Client as Connection_Client;
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
use Jetpack_Options;
/**
* Disable direct access.
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Jetpack_Partner_Coupon
*
* @since 1.6.0
*/
class Partner_Coupon {
/**
* Name of the Jetpack_Option coupon option.
*
* @var string
*/
public static $coupon_option = 'partner_coupon';
/**
* Name of the Jetpack_Option added option.
*
* @var string
*/
public static $added_option = 'partner_coupon_added';
/**
* Name of "last availability check" transient.
*
* @var string
*/
public static $last_check_transient = 'jetpack_partner_coupon_last_check';
/**
* Callable that executes a blog-authenticated request.
*
* @var callable
*/
protected $request_as_blog;
/**
* Jetpack_Partner_Coupon
*
* @var Partner_Coupon|null
**/
private static $instance = null;
/**
* A list of supported partners.
*
* @var array
*/
private static $supported_partners = array(
'IONOS' => array(
'name' => 'IONOS',
'logo' => array(
'src' => '/images/ionos-logo.jpg',
'width' => 119,
'height' => 32,
),
),
);
/**
* A list of supported presets.
*
* @var array
*/
private static $supported_presets = array(
'IONA' => 'jetpack_backup_daily',
);
/**
* Get singleton instance of class.
*
* @return Partner_Coupon
*/
public static function get_instance() {
if ( self::$instance === null ) {
self::$instance = new Partner_Coupon( array( Connection_Client::class, 'wpcom_json_api_request_as_blog' ) );
}
return self::$instance;
}
/**
* Constructor.
*
* @param callable $request_as_blog Callable that executes a blog-authenticated request.
*/
public function __construct( $request_as_blog ) {
$this->request_as_blog = $request_as_blog;
}
/**
* Register hooks to catch and purge coupon.
*
* @param string $plugin_slug The plugin slug to differentiate between Jetpack connections.
* @param string $redirect_location The location we should redirect to after catching the coupon.
*/
public static function register_coupon_admin_hooks( $plugin_slug, $redirect_location ) {
$instance = self::get_instance();
// We have to use an anonymous function, so we can pass along relevant information
// and not have to hardcode values for a single plugin.
// This open up the opportunity for e.g. the "all-in-one" and backup plugins
// to both implement partner coupon logic.
add_action(
'admin_init',
function () use ( $plugin_slug, $redirect_location, $instance ) {
$instance->catch_coupon( $plugin_slug, $redirect_location );
$instance->maybe_purge_coupon( $plugin_slug );
}
);
}
/**
* Catch partner coupon and redirect to claim component.
*
* @param string $plugin_slug The plugin slug to differentiate between Jetpack connections.
* @param string $redirect_location The location we should redirect to after catching the coupon.
*/
public function catch_coupon( $plugin_slug, $redirect_location ) {
// Accept and store a partner coupon if present, and redirect to Jetpack connection screen.
$partner_coupon = isset( $_GET['jetpack-partner-coupon'] ) ? sanitize_text_field( wp_unslash( $_GET['jetpack-partner-coupon'] ) ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( $partner_coupon ) {
Jetpack_Options::update_options(
array(
self::$coupon_option => $partner_coupon,
self::$added_option => time(),
)
);
$connection = new Connection_Manager( $plugin_slug );
if ( $connection->is_connected() ) {
$redirect_location = add_query_arg( array( 'showCouponRedemption' => 1 ), $redirect_location );
wp_safe_redirect( $redirect_location );
} else {
wp_safe_redirect( $redirect_location );
}
}
}
/**
* Purge partner coupon.
*
* We try to remotely check if a coupon looks valid. We also automatically purge
* partner coupons after a certain amount of time to prevent unnecessary look-ups
* and/or promoting a product for months or years in the future due to unknown
* errors.
*
* @param string $plugin_slug The plugin slug to differentiate between Jetpack connections.
*/
public function maybe_purge_coupon( $plugin_slug ) {
// Only run coupon checks on Jetpack admin pages.
// The "admin-ui" package is responsible for registering the Jetpack admin
// page for all Jetpack plugins and has hardcoded the settings page to be
// "jetpack", so we shouldn't need to allow for dynamic/custom values.
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( ! isset( $_GET['page'] ) || 'jetpack' !== $_GET['page'] ) {
return;
}
if ( ( new Status() )->is_offline_mode() ) {
return;
}
$connection = new Connection_Manager( $plugin_slug );
if ( ! $connection->is_connected() ) {
return;
}
if ( $this->maybe_purge_coupon_by_added_date() ) {
return;
}
// Limit checks to happen once a minute at most.
if ( get_transient( self::$last_check_transient ) ) {
return;
}
set_transient( self::$last_check_transient, true, MINUTE_IN_SECONDS );
$this->maybe_purge_coupon_by_availability_check();
}
/**
* Purge coupon based on local added date.
*
* We automatically remove the coupon after a month to "self-heal" if
* something in the claim process has broken with the site.
*
* @return bool Return whether we should skip further purge checks.
*/
protected function maybe_purge_coupon_by_added_date() {
$date = Jetpack_Options::get_option( self::$added_option, '' );
if ( empty( $date ) ) {
return true;
}
$expire_date = strtotime( '+30 days', $date );
$today = time();
if ( $today >= $expire_date ) {
$this->delete_coupon_data();
return true;
}
return false;
}
/**
* Purge coupon based on availability check.
*
* @return bool Return whether we deleted coupon data.
*/
protected function maybe_purge_coupon_by_availability_check() {
$blog_id = Jetpack_Options::get_option( 'id', false );
if ( ! $blog_id ) {
return false;
}
$coupon = self::get_coupon();
if ( ! $coupon ) {
return false;
}
$response = call_user_func_array(
$this->request_as_blog,
array(
add_query_arg(
array( 'coupon_code' => $coupon['coupon_code'] ),
sprintf(
'/sites/%d/jetpack-partner/coupon/v1/site/coupon',
$blog_id
)
),
2,
array( 'method' => 'GET' ),
null,
'wpcom',
)
);
$body = json_decode( wp_remote_retrieve_body( $response ), true );
if (
200 === wp_remote_retrieve_response_code( $response ) &&
is_array( $body ) &&
isset( $body['available'] ) &&
false === $body['available']
) {
$this->delete_coupon_data();
return true;
}
return false;
}
/**
* Delete all coupon data.
*/
protected function delete_coupon_data() {
Jetpack_Options::delete_option(
array(
self::$coupon_option,
self::$added_option,
)
);
}
/**
* Get partner coupon data.
*
* @return array|bool
*/
public static function get_coupon() {
$coupon_code = Jetpack_Options::get_option( self::$coupon_option, '' );
if ( ! is_string( $coupon_code ) || empty( $coupon_code ) ) {
return false;
}
$instance = self::get_instance();
$partner = $instance->get_coupon_partner( $coupon_code );
if ( ! $partner ) {
return false;
}
$preset = $instance->get_coupon_preset( $coupon_code );
if ( ! $preset ) {
return false;
}
$product = $instance->get_coupon_product( $preset );
if ( ! $product ) {
return false;
}
return array(
'coupon_code' => $coupon_code,
'partner' => $partner,
'preset' => $preset,
'product' => $product,
);
}
/**
* Get coupon partner.
*
* @param string $coupon_code Coupon code to go through.
* @return array|bool
*/
private function get_coupon_partner( $coupon_code ) {
if ( ! is_string( $coupon_code ) || false === strpos( $coupon_code, '_' ) ) {
return false;
}
$prefix = strtok( $coupon_code, '_' );
$supported_partners = $this->get_supported_partners();
if ( ! isset( $supported_partners[ $prefix ] ) ) {
return false;
}
return array(
'name' => $supported_partners[ $prefix ]['name'],
'prefix' => $prefix,
'logo' => isset( $supported_partners[ $prefix ]['logo'] ) ? $supported_partners[ $prefix ]['logo'] : null,
);
}
/**
* Get coupon product.
*
* @param string $coupon_preset The preset we wish to find a product for.
* @return array|bool
*/
private function get_coupon_product( $coupon_preset ) {
if ( ! is_string( $coupon_preset ) ) {
return false;
}
/**
* Allow for plugins to register supported products.
*
* @since 1.6.0
*
* @param array A list of product details.
* @return array
*/
$product_details = apply_filters( 'jetpack_partner_coupon_products', array() );
$product_slug = $this->get_supported_presets()[ $coupon_preset ];
foreach ( $product_details as $product ) {
if ( ! $this->array_keys_exist( array( 'title', 'slug', 'description', 'features' ), $product ) ) {
continue;
}
if ( $product_slug === $product['slug'] ) {
return $product;
}
}
return false;
}
/**
* Checks if multiple keys are present in an array.
*
* @param array $needles The keys we wish to check for.
* @param array $haystack The array we want to compare keys against.
*
* @return bool
*/
private function array_keys_exist( $needles, $haystack ) {
foreach ( $needles as $needle ) {
if ( ! isset( $haystack[ $needle ] ) ) {
return false;
}
}
return true;
}
/**
* Get coupon preset.
*
* @param string $coupon_code Coupon code to go through.
* @return string|bool
*/
private function get_coupon_preset( $coupon_code ) {
if ( ! is_string( $coupon_code ) ) {
return false;
}
$regex = '/^.*?_(?P<slug>.*?)_.+$/';
$matches = array();
if ( ! preg_match( $regex, $coupon_code, $matches ) ) {
return false;
}
return isset( $this->get_supported_presets()[ $matches['slug'] ] ) ? $matches['slug'] : false;
}
/**
* Get supported partners.
*
* @return array
*/
private function get_supported_partners() {
/**
* Allow external code to add additional supported partners.
*
* @since 1.6.0
*
* @param array $supported_partners A list of supported partners.
* @return array
*/
return apply_filters( 'jetpack_partner_coupon_supported_partners', self::$supported_partners );
}
/**
* Get supported presets.
*
* @return array
*/
private function get_supported_presets() {
/**
* Allow external code to add additional supported presets.
*
* @since 1.6.0
*
* @param array $supported_presets A list of supported presets.
* @return array
*/
return apply_filters( 'jetpack_partner_coupon_supported_presets', self::$supported_presets );
}
}

View File

@ -0,0 +1,199 @@
<?php
/**
* Jetpack Partner package.
*
* @package automattic/jetpack-partner
*/
namespace Automattic\Jetpack;
/**
* This class introduces functionality used by Jetpack hosting partners.
*
* @since 1.0.0
*/
class Partner {
/**
* Affiliate code.
*/
const AFFILIATE_CODE = 'affiliate';
/**
* Subsidiary id code.
*/
const SUBSIDIARY_CODE = 'subsidiary';
/**
* Singleton instance.
*
* @since 1.0.0
*
* @var Partner This class instance.
*/
private static $instance = null;
/**
* Partner constructor.
*/
private function __construct() {
}
/**
* Initializes the class or returns the singleton.
*
* @return Partner | false
* @since 1.0.0
*/
public static function init() {
if ( self::$instance === null ) {
self::$instance = new Partner();
add_filter( 'jetpack_build_authorize_url', array( self::$instance, 'add_subsidiary_id_as_query_arg' ) );
add_filter( 'jetpack_build_authorize_url', array( self::$instance, 'add_affiliate_code_as_query_arg' ) );
add_filter( 'jetpack_build_connection_url', array( self::$instance, 'add_subsidiary_id_as_query_arg' ) );
add_filter( 'jetpack_build_connection_url', array( self::$instance, 'add_affiliate_code_as_query_arg' ) );
add_filter( 'jetpack_register_request_body', array( self::$instance, 'add_subsidiary_id_to_params_array' ) );
add_filter( 'jetpack_register_request_body', array( self::$instance, 'add_affiliate_code_to_params_array' ) );
}
return self::$instance;
}
/**
* Adds the partner subsidiary code to the passed URL.
*
* @param string $url The URL.
*
* @return string
*/
public function add_subsidiary_id_as_query_arg( $url ) {
return $this->add_code_as_query_arg( self::SUBSIDIARY_CODE, $url );
}
/**
* Adds the affiliate code to the passed URL.
*
* @param string $url The URL.
*
* @return string
*/
public function add_affiliate_code_as_query_arg( $url ) {
return $this->add_code_as_query_arg( self::AFFILIATE_CODE, $url );
}
/**
* Adds the partner subsidiary code to the passed array.
*
* @param array $params The parameters array.
*
* @return array
* @since 1.5.0
*/
public function add_subsidiary_id_to_params_array( $params ) {
if ( ! is_array( $params ) ) {
return $params;
}
return array_merge( $params, $this->get_code_as_array( self::SUBSIDIARY_CODE ) );
}
/**
* Adds the affiliate code to the passed array.
*
* @param array $params The parameters array.
*
* @return array
* @since 1.5.0
*/
public function add_affiliate_code_to_params_array( $params ) {
if ( ! is_array( $params ) ) {
return $params;
}
return array_merge( $params, $this->get_code_as_array( self::AFFILIATE_CODE ) );
}
/**
* Returns the passed URL with the partner code added as a URL query arg.
*
* @param string $type The partner code.
* @param string $url The URL where the partner subsidiary id will be added.
*
* @return string The passed URL with the partner code added.
* @since 1.0.0
*/
public function add_code_as_query_arg( $type, $url ) {
return add_query_arg( $this->get_code_as_array( $type ), $url );
}
/**
* Gets the partner code in an associative array format
*
* @param string $type The partner code.
* @return array
* @since 1.5.0
*/
private function get_code_as_array( $type ) {
switch ( $type ) {
case self::AFFILIATE_CODE:
$query_arg_name = 'aff';
break;
case self::SUBSIDIARY_CODE:
$query_arg_name = 'subsidiaryId';
break;
default:
return array();
}
$code = $this->get_partner_code( $type );
if ( '' === $code ) {
return array();
}
return array( $query_arg_name => $code );
}
/**
* Returns a partner code.
*
* @param string $type This can be either 'affiliate' or 'subsidiary'. Returns empty string when code is unknown.
*
* @return string The partner code.
* @since 1.0.0
*/
public function get_partner_code( $type ) {
switch ( $type ) {
case self::AFFILIATE_CODE:
/**
* Allow to filter the affiliate code.
*
* @param string $affiliate_code The affiliate code, blank by default.
*
* @since 1.0.0
* @since-jetpack 6.9.0
*/
return apply_filters( 'jetpack_affiliate_code', get_option( 'jetpack_affiliate_code', '' ) );
case self::SUBSIDIARY_CODE:
/**
* Allow to filter the partner subsidiary id.
*
* @param string $subsidiary_id The partner subsidiary id, blank by default.
*
* @since 1.0.0
*/
return apply_filters(
'jetpack_partner_subsidiary_id',
get_option( 'jetpack_partner_subsidiary_id', '' )
);
default:
return '';
}
}
/**
* Resets the singleton for testing purposes.
*/
public static function reset() {
self::$instance = null;
}
}

View File

@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.2.0] - 2022-08-23
### Added
- Add method to check plugin activation context. [#25422]
## [0.1.4] - 2022-07-26
### Changed
- Updated package dependencies. [#25158]
@ -32,6 +36,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Fix method logic
[0.2.0]: https://github.com/Automattic/jetpack-plugins-installer/compare/v0.1.4...v0.2.0
[0.1.4]: https://github.com/Automattic/jetpack-plugins-installer/compare/v0.1.3...v0.1.4
[0.1.3]: https://github.com/Automattic/jetpack-plugins-installer/compare/v0.1.2...v0.1.3
[0.1.2]: https://github.com/Automattic/jetpack-plugins-installer/compare/v0.1.1...v0.1.2

View File

@ -30,7 +30,7 @@
"prefer-stable": true,
"extra": {
"branch-alias": {
"dev-trunk": "0.1.x-dev"
"dev-trunk": "0.2.x-dev"
},
"mirror-repo": "Automattic/jetpack-plugins-installer",
"changelogger": {

View File

@ -235,4 +235,57 @@ class Plugins_Installer {
return array();
}
/**
* Determine if the current request is activating a plugin from the plugins page.
*
* @param string $plugin Plugin file path to check.
* @return bool
*/
public static function is_current_request_activating_plugin_from_plugins_screen( $plugin ) {
// Filter out common async request contexts
if (
wp_doing_ajax() ||
( defined( 'REST_REQUEST' ) && REST_REQUEST ) ||
( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) ||
( defined( 'WP_CLI' ) && WP_CLI )
) {
return false;
}
if ( isset( $_SERVER['SCRIPT_NAME'] ) ) {
$request_file = esc_url_raw( wp_unslash( $_SERVER['SCRIPT_NAME'] ) );
} elseif ( isset( $_SERVER['REQUEST_URI'] ) ) {
list( $request_file ) = explode( '?', esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
} else {
return false;
}
// Not the plugins page
if ( strpos( $request_file, 'wp-admin/plugins.php' ) === false ) {
return false;
}
// Same method to get the action as used by plugins.php
$wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
$action = $wp_list_table->current_action();
// Not a singular activation
// This also means that if the plugin is activated as part of a group ( bulk activation ), this function will return false here.
if ( 'activate' !== $action ) {
return false;
}
// Check the nonce associated with the plugin activation
// We are not changing any data here, so this is not super necessary, it's just a best practice before using the form data from $_REQUEST.
check_admin_referer( 'activate-plugin_' . $plugin );
// Not the right plugin
$requested_plugin = isset( $_REQUEST['plugin'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['plugin'] ) ) : null;
if ( $requested_plugin !== $plugin ) {
return false;
}
return true;
}
}

View File

@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.38.2] - 2022-08-29
### Changed
- Updated package dependencies.
## [1.38.1] - 2022-08-25
### Changed
- Search Sync Settings :: Add Marketplace related meta fields and taxonomies to allow list [#25376]
## [1.38.0] - 2022-08-23
### Added
- Search: add product-brand to taxonomy sync list to support WooCommerce Brands plugin. [#25665]
### Changed
- Updated package dependencies. [#25628]
## [1.37.1] - 2022-08-03
### Changed
- Updated package dependencies. [#25300, #25315]
## [1.37.0] - 2022-07-26
### Changed
- Jetpack Sync: Add Sync lock related info in Sync debug details. [#25140]
@ -692,6 +711,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Packages: Move sync to a classmapped package
[1.38.2]: https://github.com/Automattic/jetpack-sync/compare/v1.38.1...v1.38.2
[1.38.1]: https://github.com/Automattic/jetpack-sync/compare/v1.38.0...v1.38.1
[1.38.0]: https://github.com/Automattic/jetpack-sync/compare/v1.37.1...v1.38.0
[1.37.1]: https://github.com/Automattic/jetpack-sync/compare/v1.37.0...v1.37.1
[1.37.0]: https://github.com/Automattic/jetpack-sync/compare/v1.36.1...v1.37.0
[1.36.1]: https://github.com/Automattic/jetpack-sync/compare/v1.36.0...v1.36.1
[1.36.0]: https://github.com/Automattic/jetpack-sync/compare/v1.35.2...v1.36.0

View File

@ -4,7 +4,7 @@
"type": "jetpack-library",
"license": "GPL-2.0-or-later",
"require": {
"automattic/jetpack-connection": "^1.41",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-constants": "^1.6",
"automattic/jetpack-identity-crisis": "^0.8",
"automattic/jetpack-password-checker": "^0.2",
@ -46,7 +46,7 @@
"link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.37.x-dev"
"dev-trunk": "1.38.x-dev"
}
},
"config": {

View File

@ -12,7 +12,7 @@ namespace Automattic\Jetpack\Sync;
*/
class Package_Version {
const PACKAGE_VERSION = '1.37.0';
const PACKAGE_VERSION = '1.38.2';
const PACKAGE_SLUG = 'sync';

View File

@ -69,360 +69,367 @@ class Search extends Module {
*/
private static $postmeta_to_sync = array(
// jetpack.
'jetpack-search-meta0' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta1' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta2' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta3' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta4' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta5' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta6' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta7' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta8' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta9' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta0' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta1' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta2' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta3' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta4' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta5' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta6' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta7' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta8' => array( 'searchable_in_all_content' => true ),
'jetpack-search-meta9' => array( 'searchable_in_all_content' => true ),
// woocommerce.
'entity_types' => array(),
'exclude_product_categories' => array(),
'exclude_product_ids' => array(),
'free_shipping' => array(),
'id_field' => array(),
'individual_use' => array(),
'limit_usage_to_x_items' => array(),
'maximum_amount' => array(),
'minimum_amount' => array(),
'post_id' => array(),
'product_categories' => array( 'searchable_in_all_content' => true ),
'product_ids' => array(),
'total_sales' => array(
'entity_types' => array(),
'exclude_product_categories' => array(),
'exclude_product_ids' => array(),
'free_shipping' => array(),
'id_field' => array(),
'individual_use' => array(),
'limit_usage_to_x_items' => array(),
'maximum_amount' => array(),
'minimum_amount' => array(),
'post_id' => array(),
'product_categories' => array( 'searchable_in_all_content' => true ),
'product_ids' => array(),
'total_sales' => array(
'available' => false,
'alternatives' => array(
'wc.percent_of_sales',
),
),
'usage_limit' => array(),
'usage_limit_per_user' => array(),
'_crosssell_ids' => array(),
'_downloadable' => array(),
'_featured' => array(),
'_height' => array(),
'_length' => array(),
'_price' => array(
'usage_limit' => array(),
'usage_limit_per_user' => array(),
'_crosssell_ids' => array(),
'_downloadable' => array(),
'_featured' => array(),
'_height' => array(),
'_length' => array(),
'_price' => array(
'alternatives' => array(
'wc.price',
'wc.min_price',
'wc.max_price',
),
),
'_prices_include_tax' => array(),
'_product_attributes' => array(),
'_product_version' => array(),
'_regular_price' => array(
'_prices_include_tax' => array(),
'_product_attributes' => array(),
'_product_version' => array(),
'_regular_price' => array(
'alternatives' => array(
'wc.regular_price',
),
),
'_sale_price' => array(
'_sale_price' => array(
'alternatives' => array(
'wc.sale_price',
),
),
'_sale_price_dates_from' => array(),
'_sale_price_dates_to' => array(),
'_sku' => array( 'searchable_in_all_content' => true ),
'_stock_status' => array(),
'_wc_average_rating' => array(
'_sale_price_dates_from' => array(),
'_sale_price_dates_to' => array(),
'_sku' => array( 'searchable_in_all_content' => true ),
'_stock_status' => array(),
'_wc_average_rating' => array(
'alternatives' => array(
'wc.ave_rating_score',
),
),
'_wc_rating_count' => array(
'_wc_rating_count' => array(
'alternatives' => array(
'wc.rating', // wc.rating.count_1, wc.rating.count_2, ...
),
),
'_wc_review_count' => array(),
'_weight' => array(),
'_width' => array(),
'_wc_review_count' => array(),
'_weight' => array(),
'_width' => array(),
// co-authors plus.
'cap-description' => array( 'searchable_in_all_content' => true ),
'cap-user_login' => array( 'searchable_in_all_content' => true ),
'cap-user_email' => array(),
'cap-last_name' => array( 'searchable_in_all_content' => true ),
'cap-first_name' => array( 'searchable_in_all_content' => true ),
'cap-display_name' => array( 'searchable_in_all_content' => true ),
'cap-website' => array(),
'cap-jabber' => array(),
'cap-aim' => array(),
'cap-twitter' => array(),
'cap-facebook' => array(),
'cap-google_plus' => array(),
'cap-job_title' => array( 'searchable_in_all_content' => true ),
'cap-description' => array( 'searchable_in_all_content' => true ),
'cap-user_login' => array( 'searchable_in_all_content' => true ),
'cap-user_email' => array(),
'cap-last_name' => array( 'searchable_in_all_content' => true ),
'cap-first_name' => array( 'searchable_in_all_content' => true ),
'cap-display_name' => array( 'searchable_in_all_content' => true ),
'cap-website' => array(),
'cap-jabber' => array(),
'cap-aim' => array(),
'cap-twitter' => array(),
'cap-facebook' => array(),
'cap-google_plus' => array(),
'cap-job_title' => array( 'searchable_in_all_content' => true ),
// bbpress.
'bbpl_like' => array(),
'bbpress_discussion_comments_copied' => array(),
'bbpress_discussion_tags_copied' => array(),
'bbpress_discussion_topic_id' => array(),
'bbpress_discussion_use_defaults' => array(),
'bbpress_page_header_bg' => array(),
'bbpress_title_bg' => array(),
'use_bbpress_discussion_topic' => array(),
'bbpl_like' => array(),
'bbpress_discussion_comments_copied' => array(),
'bbpress_discussion_tags_copied' => array(),
'bbpress_discussion_topic_id' => array(),
'bbpress_discussion_use_defaults' => array(),
'bbpress_page_header_bg' => array(),
'bbpress_title_bg' => array(),
'use_bbpress_discussion_topic' => array(),
// wpml.
'tm_meta_wpml' => array(),
'wpml_language' => array(),
'wpml_media_lang' => array(),
'wpml_media_processed' => array(),
'tm_meta_wpml' => array(),
'wpml_language' => array(),
'wpml_media_lang' => array(),
'wpml_media_processed' => array(),
// blogger import.
'blogger_author' => array( 'searchable_in_all_content' => true ),
'blogger_blog' => array( 'searchable_in_all_content' => true ),
'blogger_permalink' => array( 'searchable_in_all_content' => true ),
'blogger_author' => array( 'searchable_in_all_content' => true ),
'blogger_blog' => array( 'searchable_in_all_content' => true ),
'blogger_permalink' => array( 'searchable_in_all_content' => true ),
// geo.
'geo_address' => array( 'searchable_in_all_content' => true ),
'geo_latitude' => array(),
'geo_longitude' => array(),
'geo_public' => array(),
'geolocated' => array(),
'geolocation_city' => array( 'searchable_in_all_content' => true ),
'geolocation_country_long' => array( 'searchable_in_all_content' => true ),
'geolocation_country_short' => array( 'searchable_in_all_content' => true ),
'geolocation_formatted_address' => array( 'searchable_in_all_content' => true ),
'geolocation_lat' => array(),
'geolocation_long' => array(),
'geolocation_postcode' => array( 'searchable_in_all_content' => true ),
'geolocation_state_long' => array( 'searchable_in_all_content' => true ),
'geolocation_state_short' => array( 'searchable_in_all_content' => true ),
'geo_address' => array( 'searchable_in_all_content' => true ),
'geo_latitude' => array(),
'geo_longitude' => array(),
'geo_public' => array(),
'geolocated' => array(),
'geolocation_city' => array( 'searchable_in_all_content' => true ),
'geolocation_country_long' => array( 'searchable_in_all_content' => true ),
'geolocation_country_short' => array( 'searchable_in_all_content' => true ),
'geolocation_formatted_address' => array( 'searchable_in_all_content' => true ),
'geolocation_lat' => array(),
'geolocation_long' => array(),
'geolocation_postcode' => array( 'searchable_in_all_content' => true ),
'geolocation_state_long' => array( 'searchable_in_all_content' => true ),
'geolocation_state_short' => array( 'searchable_in_all_content' => true ),
// wp-ultimate-recipe.
'recipe_alternate_image' => array(),
'recipe_cook_time' => array(),
'recipe_cook_time_text' => array(),
'recipe_description' => array( 'searchable_in_all_content' => true ),
'recipe_ingredients' => array( 'searchable_in_all_content' => true ),
'recipe_instructions' => array( 'searchable_in_all_content' => true ),
'recipe_notes' => array( 'searchable_in_all_content' => true ),
'recipe_nutritional' => array( 'searchable_in_all_content' => true ),
'recipe_passive_time' => array(),
'recipe_passive_time_text' => array(),
'recipe_prep_time' => array(),
'recipe_prep_time_text' => array(),
'recipe_rating' => array(),
'recipe_servings' => array(),
'recipe_servings_normalized' => array(),
'recipe_servings_type' => array(),
'recipe_terms' => array( 'searchable_in_all_content' => true ),
'recipe_terms_with_parents' => array(),
'recipe_title' => array( 'searchable_in_all_content' => true ),
'recipe_user_ratings' => array(),
'recipe_user_ratings_rating' => array(),
'recipe_alternate_image' => array(),
'recipe_cook_time' => array(),
'recipe_cook_time_text' => array(),
'recipe_description' => array( 'searchable_in_all_content' => true ),
'recipe_ingredients' => array( 'searchable_in_all_content' => true ),
'recipe_instructions' => array( 'searchable_in_all_content' => true ),
'recipe_notes' => array( 'searchable_in_all_content' => true ),
'recipe_nutritional' => array( 'searchable_in_all_content' => true ),
'recipe_passive_time' => array(),
'recipe_passive_time_text' => array(),
'recipe_prep_time' => array(),
'recipe_prep_time_text' => array(),
'recipe_rating' => array(),
'recipe_servings' => array(),
'recipe_servings_normalized' => array(),
'recipe_servings_type' => array(),
'recipe_terms' => array( 'searchable_in_all_content' => true ),
'recipe_terms_with_parents' => array(),
'recipe_title' => array( 'searchable_in_all_content' => true ),
'recipe_user_ratings' => array(),
'recipe_user_ratings_rating' => array(),
// generic fields.
// from advanced-custom-fields and metabox.io .
'Link' => array(),
'Location' => array(),
'Title' => array( 'searchable_in_all_content' => true ),
'ad_code' => array(),
'address' => array(),
'admin_mail' => array(),
'admin_only' => array(),
'advertisers' => array( 'searchable_in_all_content' => true ),
'age' => array(),
'aliases' => array(),
'alternate_title' => array(),
'amazon' => array(),
'answer' => array( 'searchable_in_all_content' => true ),
'area' => array(),
'attention' => array(),
'attr' => array(),
'author' => array( 'searchable_in_all_content' => true ),
'author_name' => array( 'searchable_in_all_content' => true ),
'blog' => array(),
'blog_id' => array(),
'call_to_action' => array(),
'campaign_preview' => array(),
'canonical_url' => array(),
'catch_text' => array(),
'category' => array( 'searchable_in_all_content' => true ),
'classificacao' => array(),
'classification' => array(),
'code' => array(),
'codigo' => array(),
'company' => array( 'searchable_in_all_content' => true ),
'company_website' => array(),
'config' => array(),
'construction' => array(),
'container_ids' => array(),
'content' => array( 'searchable_in_all_content' => true ),
'content_body-full_content' => array( 'searchable_in_all_content' => true ),
'copyright' => array(),
'custom_page_title' => array( 'searchable_in_all_content' => true ),
'custom_permalink' => array(),
'customize' => array(),
'data' => array(),
'date' => array(),
'day' => array(),
'descripcion' => array( 'searchable_in_all_content' => true ),
'description' => array( 'searchable_in_all_content' => true ),
'display_settings' => array(),
'display_type' => array(),
'duration' => array(),
'embed' => array(),
'entity_ids' => array(),
'entity_types' => array(),
'event_subtitle' => array( 'searchable_in_all_content' => true ),
'excluded_container_ids' => array(),
'exclusions' => array(),
'experience' => array(),
'external_url' => array(),
'featured' => array(),
'featured_image' => array(),
'featured_post' => array(),
'featured_story' => array(),
'fee' => array(),
'filter' => array(),
'follow' => array(),
'footer_text' => array(),
'from_header' => array(),
'fullscreen_view' => array(),
'gallery' => array(),
'genre' => array( 'searchable_in_all_content' => true ),
'guests' => array( 'searchable_in_all_content' => true ),
'has_variations' => array(),
'hashtag' => array(),
'header_image' => array(),
'hidden_from_ui' => array(),
'hide_on_screen' => array(),
'homepage_order' => array(),
'hours' => array(),
'i18n' => array(),
'id' => array(),
'image' => array(),
'image_size' => array(),
'image_source' => array(),
'index' => array(),
'intro_text' => array( 'searchable_in_all_content' => true ),
'job_mention' => array( 'searchable_in_all_content' => true ),
'keywords' => array( 'searchable_in_all_content' => true ),
'latest_news' => array(),
'layout' => array(),
'link' => array(),
'link_dump' => array( 'searchable_in_all_content' => true ),
'link_url' => array(),
'location' => array(),
'logo' => array(),
'main_title' => array( 'searchable_in_all_content' => true ),
'maximum_entity_count' => array(),
'media' => array(),
'mentions' => array(),
'messages' => array(),
'meta_description' => array( 'searchable_in_all_content' => true ),
'meta_id' => array(),
'meta_index' => array(),
'meta_key' => array(),
'meta_value' => array(),
'modal-dialog-id' => array(),
'name' => array( 'searchable_in_all_content' => true ),
'nombre' => array( 'searchable_in_all_content' => true ),
'notes' => array( 'searchable_in_all_content' => true ),
'options' => array(),
'order_by' => array(),
'order_direction' => array(),
'original_cats' => array(),
'original_headers' => array(),
'original_link' => array(),
'original_message' => array(),
'original_subject' => array(),
'original_title' => array(),
'original_to' => array(),
'other_setting' => array(),
'page_canonical' => array(),
'page_layout' => array(),
'page_sidebar' => array(),
'page_tags' => array(),
'panels_data' => array(),
'parking' => array(),
'pdf_upload' => array(),
'photo' => array(),
'play_time' => array(),
'position' => array(),
'post-rating' => array(),
'post_background' => array(),
'post_color' => array(),
'post_sidebar' => array(),
'post_subtitle' => array( 'searchable_in_all_content' => true ),
'price' => array(),
'publication' => array(),
'rating' => array(),
'ratings_average' => array(),
'ratings_score' => array(),
'ratings_users' => array(),
'relation' => array(),
'reply_to_header' => array(),
'required' => array(),
'returns' => array(),
'review_post' => array(),
'rule' => array(),
'section' => array( 'searchable_in_all_content' => true ),
'session_transcript' => array(),
'settings' => array(),
'sex' => array(),
'shares_count' => array(),
'show_description' => array( 'searchable_in_all_content' => true ),
'show_page_title' => array(),
'side' => array(),
'sidebar' => array(),
'site' => array(),
'situation' => array(),
'slide_template' => array(),
'slug' => array(),
'sortorder' => array(),
'source' => array(),
'start_date' => array(),
'status' => array(),
'styles' => array(),
'subtitle' => array( 'searchable_in_all_content' => true ),
'subtitulo' => array(),
'success' => array(),
'summary' => array( 'searchable_in_all_content' => true ),
'synopsis' => array( 'searchable_in_all_content' => true ),
'tel' => array(),
'tema' => array(),
'testimonial' => array(),
'testimonial_author' => array(),
'text_already_subscribed' => array(),
'text_error' => array(),
'text_invalid_email' => array(),
'text_not_subscribed' => array(),
'text_required_field_missing' => array(),
'text_subscribed' => array(),
'text_unsubscribed' => array(),
'thumbnail' => array(),
'time' => array(),
'time_jump_list' => array( 'searchable_in_all_content' => true ),
'title' => array( 'searchable_in_all_content' => true ),
'title_view' => array(),
'titre' => array( 'searchable_in_all_content' => true ),
'titulo' => array( 'searchable_in_all_content' => true ),
'to_header' => array(),
'toc' => array(),
'transcript' => array( 'searchable_in_all_content' => true ),
'transport_uri' => array(),
'type' => array(),
'url' => array(),
'validation' => array(),
'value' => array(),
'values' => array(),
'variation' => array(),
'video' => array(),
'video_type' => array(),
'video_url' => array(),
'videopress_guid' => array(),
'website' => array(),
'weight' => array(),
'year' => array(),
'Link' => array(),
'Location' => array(),
'Title' => array( 'searchable_in_all_content' => true ),
'ad_code' => array(),
'address' => array(),
'admin_mail' => array(),
'admin_only' => array(),
'advertisers' => array( 'searchable_in_all_content' => true ),
'age' => array(),
'aliases' => array(),
'alternate_title' => array(),
'amazon' => array(),
'answer' => array( 'searchable_in_all_content' => true ),
'area' => array(),
'attention' => array(),
'attr' => array(),
'author' => array( 'searchable_in_all_content' => true ),
'author_name' => array( 'searchable_in_all_content' => true ),
'blog' => array(),
'blog_id' => array(),
'call_to_action' => array(),
'campaign_preview' => array(),
'canonical_url' => array(),
'catch_text' => array(),
'category' => array( 'searchable_in_all_content' => true ),
'classificacao' => array(),
'classification' => array(),
'code' => array(),
'codigo' => array(),
'company' => array( 'searchable_in_all_content' => true ),
'company_website' => array(),
'config' => array(),
'construction' => array(),
'container_ids' => array(),
'content' => array( 'searchable_in_all_content' => true ),
'content_body-full_content' => array( 'searchable_in_all_content' => true ),
'copyright' => array(),
'custom_page_title' => array( 'searchable_in_all_content' => true ),
'custom_permalink' => array(),
'customize' => array(),
'data' => array(),
'date' => array(),
'day' => array(),
'descripcion' => array( 'searchable_in_all_content' => true ),
'description' => array( 'searchable_in_all_content' => true ),
'display_settings' => array(),
'display_type' => array(),
'duration' => array(),
'embed' => array(),
'entity_ids' => array(),
'entity_types' => array(),
'event_subtitle' => array( 'searchable_in_all_content' => true ),
'excluded_container_ids' => array(),
'exclusions' => array(),
'experience' => array(),
'external_url' => array(),
'featured' => array(),
'featured_image' => array(),
'featured_post' => array(),
'featured_story' => array(),
'fee' => array(),
'filter' => array(),
'follow' => array(),
'footer_text' => array(),
'from_header' => array(),
'fullscreen_view' => array(),
'gallery' => array(),
'genre' => array( 'searchable_in_all_content' => true ),
'guests' => array( 'searchable_in_all_content' => true ),
'has_variations' => array(),
'hashtag' => array(),
'header_image' => array(),
'hidden_from_ui' => array(),
'hide_on_screen' => array(),
'homepage_order' => array(),
'hours' => array(),
'i18n' => array(),
'id' => array(),
'image' => array(),
'image_size' => array(),
'image_source' => array(),
'index' => array(),
'intro_text' => array( 'searchable_in_all_content' => true ),
'job_mention' => array( 'searchable_in_all_content' => true ),
'keywords' => array( 'searchable_in_all_content' => true ),
'latest_news' => array(),
'layout' => array(),
'link' => array(),
'link_dump' => array( 'searchable_in_all_content' => true ),
'link_url' => array(),
'location' => array(),
'logo' => array(),
'main_title' => array( 'searchable_in_all_content' => true ),
'maximum_entity_count' => array(),
'media' => array(),
'mentions' => array(),
'messages' => array(),
'meta_description' => array( 'searchable_in_all_content' => true ),
'meta_id' => array(),
'meta_index' => array(),
'meta_key' => array(),
'meta_value' => array(),
'modal-dialog-id' => array(),
'name' => array( 'searchable_in_all_content' => true ),
'nombre' => array( 'searchable_in_all_content' => true ),
'notes' => array( 'searchable_in_all_content' => true ),
'options' => array(),
'order_by' => array(),
'order_direction' => array(),
'original_cats' => array(),
'original_headers' => array(),
'original_link' => array(),
'original_message' => array(),
'original_subject' => array(),
'original_title' => array(),
'original_to' => array(),
'other_setting' => array(),
'page_canonical' => array(),
'page_layout' => array(),
'page_sidebar' => array(),
'page_tags' => array(),
'panels_data' => array(),
'parking' => array(),
'pdf_upload' => array(),
'photo' => array(),
'play_time' => array(),
'position' => array(),
'post-rating' => array(),
'post_background' => array(),
'post_color' => array(),
'post_sidebar' => array(),
'post_subtitle' => array( 'searchable_in_all_content' => true ),
'price' => array(),
'publication' => array(),
'rating' => array(),
'ratings_average' => array(),
'ratings_score' => array(),
'ratings_users' => array(),
'relation' => array(),
'reply_to_header' => array(),
'required' => array(),
'returns' => array(),
'review_post' => array(),
'rule' => array(),
'section' => array( 'searchable_in_all_content' => true ),
'session_transcript' => array(),
'settings' => array(),
'sex' => array(),
'shares_count' => array(),
'show_description' => array( 'searchable_in_all_content' => true ),
'show_page_title' => array(),
'side' => array(),
'sidebar' => array(),
'site' => array(),
'situation' => array(),
'slide_template' => array(),
'slug' => array(),
'sortorder' => array(),
'source' => array(),
'start_date' => array(),
'status' => array(),
'styles' => array(),
'subtitle' => array( 'searchable_in_all_content' => true ),
'subtitulo' => array(),
'success' => array(),
'summary' => array( 'searchable_in_all_content' => true ),
'synopsis' => array( 'searchable_in_all_content' => true ),
'tel' => array(),
'tema' => array(),
'testimonial' => array(),
'testimonial_author' => array(),
'text_already_subscribed' => array(),
'text_error' => array(),
'text_invalid_email' => array(),
'text_not_subscribed' => array(),
'text_required_field_missing' => array(),
'text_subscribed' => array(),
'text_unsubscribed' => array(),
'thumbnail' => array(),
'time' => array(),
'time_jump_list' => array( 'searchable_in_all_content' => true ),
'title' => array( 'searchable_in_all_content' => true ),
'title_view' => array(),
'titre' => array( 'searchable_in_all_content' => true ),
'titulo' => array( 'searchable_in_all_content' => true ),
'to_header' => array(),
'toc' => array(),
'transcript' => array( 'searchable_in_all_content' => true ),
'transport_uri' => array(),
'type' => array(),
'url' => array(),
'validation' => array(),
'value' => array(),
'values' => array(),
'variation' => array(),
'video' => array(),
'video_type' => array(),
'video_url' => array(),
'videopress_guid' => array(),
'website' => array(),
'weight' => array(),
'year' => array(),
// wp.com martketplace search - @see https://wp.me/pdh6GB-Ax#comment-2104
'_app_icon' => array(),
'_featured_product_video' => array(),
'wpcom_marketplace_org_slug' => array(),
'_wc_general_product_dependency_theme' => array(),
'_wc_general_product_dependency_plugin' => array(),
); // end indexed post meta.
@ -1004,8 +1011,9 @@ class Search extends Module {
'pa_width',
'pa_zout-water-geschikt',
'product',
'product-category',
'product-brand',
'product_brand',
'product-category',
'product_delivery_time',
'product_delivery_times',
'product_price_label',
@ -1700,6 +1708,9 @@ class Search extends Module {
'timeline-pillar',
'timeline-type',
// wp.com martketplace search - @see https://wp.me/pdh6GB-Ax#comment-2104
'wpcom_marketplace_categories',
); // end taxonomies.
/**

View File

@ -6,27 +6,23 @@ return array(
'packages' => array(
'jetpack-config' => array(
'path' => 'jetpack_vendor/automattic/jetpack-config',
'ver' => '1.9.3',
'ver' => '1.9.6',
),
'jetpack-plugins-installer' => array(
'path' => 'jetpack_vendor/automattic/jetpack-plugins-installer',
'ver' => '0.1.4',
'ver' => '0.2.0',
),
'jetpack-admin-ui' => array(
'path' => 'jetpack_vendor/automattic/jetpack-admin-ui',
'ver' => '0.2.11',
),
'jetpack-connection' => array(
'path' => 'jetpack_vendor/automattic/jetpack-connection',
'ver' => '1.41.7',
),
'jetpack-licensing' => array(
'path' => 'jetpack_vendor/automattic/jetpack-licensing',
'ver' => '1.7.5',
),
'jetpack-assets' => array(
'path' => 'jetpack_vendor/automattic/jetpack-assets',
'ver' => '1.17.20',
'ver' => '1.17.21',
),
'jetpack-jitm' => array(
'path' => 'jetpack_vendor/automattic/jetpack-jitm',
'ver' => '2.2.26',
),
'jetpack-password-checker' => array(
'path' => 'jetpack_vendor/automattic/jetpack-password-checker',
@ -34,15 +30,23 @@ return array(
),
'jetpack-idc' => array(
'path' => 'jetpack_vendor/automattic/jetpack-identity-crisis',
'ver' => '0.8.18',
'ver' => '0.8.22',
),
'jetpack-connection' => array(
'path' => 'jetpack_vendor/automattic/jetpack-connection',
'ver' => '1.44.0',
),
'jetpack-licensing' => array(
'path' => 'jetpack_vendor/automattic/jetpack-licensing',
'ver' => '1.7.8',
),
'jetpack-sync' => array(
'path' => 'jetpack_vendor/automattic/jetpack-sync',
'ver' => '1.37.0',
'ver' => '1.38.2',
),
'jetpack-my-jetpack' => array(
'path' => 'jetpack_vendor/automattic/jetpack-my-jetpack',
'ver' => '1.8.2',
'ver' => '2.0.3',
),
),
);

View File

@ -4,7 +4,7 @@ Tags: jetpack, protect, security, malware, scan
Requires at least: 5.9
Requires PHP: 5.6
Tested up to: 6.0
Stable tag: 1.0.2
Stable tag: 1.0.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@ -109,7 +109,7 @@ The features of the new Jetpack Protect plugin are not included in the [Jetpack
3. View all the found vulnerabilities in your site and learn how to fix them.
== Changelog ==
### 1.0.2 - 2022-07-27
### 1.0.4 - 2022-08-29
#### Fixed
- Admin toolbar: ensure the toolbar icon is properly displayed, even when the Jetpack plugin is enabled and connected.
- General: avoid PHP notices when fetching reports about your site.
- Fixed NaN error that prevented the pricing interstitial from rendering.

View File

@ -14,6 +14,7 @@ use Automattic\Jetpack\Assets;
use Automattic\Jetpack\Connection\Initial_State as Connection_Initial_State;
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
use Automattic\Jetpack\Connection\Rest_Authentication as Connection_Rest_Authentication;
use Automattic\Jetpack\JITMS\JITM as JITM;
use Automattic\Jetpack\My_Jetpack\Initializer as My_Jetpack_Initializer;
use Automattic\Jetpack\My_Jetpack\Products as My_Jetpack_Products;
use Automattic\Jetpack\Plugins_Installer;
@ -106,6 +107,9 @@ class Jetpack_Protect {
My_Jetpack_Initializer::init();
Site_Health::init();
// Sets up JITMS.
JITM::configure();
}
/**

View File

@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2::getLoader();
return ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4::getLoader();

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -43,12 +43,18 @@ return array(
'Automattic\\Jetpack\\Connection\\XMLRPC_Connector' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-xmlrpc-connector.php',
'Automattic\\Jetpack\\Constants' => $baseDir . '/jetpack_vendor/automattic/jetpack-constants/src/class-constants.php',
'Automattic\\Jetpack\\CookieState' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php',
'Automattic\\Jetpack\\Device_Detection' => $baseDir . '/jetpack_vendor/automattic/jetpack-device-detection/src/class-device-detection.php',
'Automattic\\Jetpack\\Device_Detection\\User_Agent_Info' => $baseDir . '/jetpack_vendor/automattic/jetpack-device-detection/src/class-user-agent-info.php',
'Automattic\\Jetpack\\Errors' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-errors.php',
'Automattic\\Jetpack\\Files' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-files.php',
'Automattic\\Jetpack\\Heartbeat' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-heartbeat.php',
'Automattic\\Jetpack\\IdentityCrisis\\REST_Endpoints' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-rest-endpoints.php',
'Automattic\\Jetpack\\IdentityCrisis\\UI' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php',
'Automattic\\Jetpack\\Identity_Crisis' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-identity-crisis.php',
'Automattic\\Jetpack\\JITMS\\JITM' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-jitm.php',
'Automattic\\Jetpack\\JITMS\\Post_Connection_JITM' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-post-connection-jitm.php',
'Automattic\\Jetpack\\JITMS\\Pre_Connection_JITM' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-pre-connection-jitm.php',
'Automattic\\Jetpack\\JITMS\\Rest_Api_Endpoints' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-rest-api-endpoints.php',
'Automattic\\Jetpack\\Licensing' => $baseDir . '/jetpack_vendor/automattic/jetpack-licensing/src/class-licensing.php',
'Automattic\\Jetpack\\Licensing\\Endpoints' => $baseDir . '/jetpack_vendor/automattic/jetpack-licensing/src/class-endpoints.php',
'Automattic\\Jetpack\\Modules' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-modules.php',
@ -72,6 +78,8 @@ return array(
'Automattic\\Jetpack\\My_Jetpack\\REST_Products' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-products.php',
'Automattic\\Jetpack\\My_Jetpack\\REST_Purchases' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-purchases.php',
'Automattic\\Jetpack\\My_Jetpack\\Wpcom_Products' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-wpcom-products.php',
'Automattic\\Jetpack\\Partner' => $baseDir . '/jetpack_vendor/automattic/jetpack-partner/src/class-partner.php',
'Automattic\\Jetpack\\Partner_Coupon' => $baseDir . '/jetpack_vendor/automattic/jetpack-partner/src/class-partner-coupon.php',
'Automattic\\Jetpack\\Password_Checker' => $baseDir . '/jetpack_vendor/automattic/jetpack-password-checker/src/class-password-checker.php',
'Automattic\\Jetpack\\Paths' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-paths.php',
'Automattic\\Jetpack\\Plugins_Installer' => $baseDir . '/jetpack_vendor/automattic/jetpack-plugins-installer/src/class-plugins-installer.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
class ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirec4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2($fileIdentifier, $file);
composerRequirec4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
* @param string $file
* @return void
*/
function composerRequirec4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2($fileIdentifier, $file)
function composerRequirec4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
class ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4
{
public static $files = array (
'3773ef3f09c37da5478d578e32b03a4b' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-assets/actions.php',
@ -62,12 +62,18 @@ class ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
'Automattic\\Jetpack\\Connection\\XMLRPC_Connector' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-connection/src/class-xmlrpc-connector.php',
'Automattic\\Jetpack\\Constants' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-constants/src/class-constants.php',
'Automattic\\Jetpack\\CookieState' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php',
'Automattic\\Jetpack\\Device_Detection' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-device-detection/src/class-device-detection.php',
'Automattic\\Jetpack\\Device_Detection\\User_Agent_Info' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-device-detection/src/class-user-agent-info.php',
'Automattic\\Jetpack\\Errors' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-status/src/class-errors.php',
'Automattic\\Jetpack\\Files' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-status/src/class-files.php',
'Automattic\\Jetpack\\Heartbeat' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-connection/src/class-heartbeat.php',
'Automattic\\Jetpack\\IdentityCrisis\\REST_Endpoints' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-rest-endpoints.php',
'Automattic\\Jetpack\\IdentityCrisis\\UI' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php',
'Automattic\\Jetpack\\Identity_Crisis' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-identity-crisis.php',
'Automattic\\Jetpack\\JITMS\\JITM' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-jitm/src/class-jitm.php',
'Automattic\\Jetpack\\JITMS\\Post_Connection_JITM' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-jitm/src/class-post-connection-jitm.php',
'Automattic\\Jetpack\\JITMS\\Pre_Connection_JITM' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-jitm/src/class-pre-connection-jitm.php',
'Automattic\\Jetpack\\JITMS\\Rest_Api_Endpoints' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-jitm/src/class-rest-api-endpoints.php',
'Automattic\\Jetpack\\Licensing' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-licensing/src/class-licensing.php',
'Automattic\\Jetpack\\Licensing\\Endpoints' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-licensing/src/class-endpoints.php',
'Automattic\\Jetpack\\Modules' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-status/src/class-modules.php',
@ -91,6 +97,8 @@ class ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
'Automattic\\Jetpack\\My_Jetpack\\REST_Products' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-products.php',
'Automattic\\Jetpack\\My_Jetpack\\REST_Purchases' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-purchases.php',
'Automattic\\Jetpack\\My_Jetpack\\Wpcom_Products' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-wpcom-products.php',
'Automattic\\Jetpack\\Partner' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-partner/src/class-partner.php',
'Automattic\\Jetpack\\Partner_Coupon' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-partner/src/class-partner-coupon.php',
'Automattic\\Jetpack\\Password_Checker' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-password-checker/src/class-password-checker.php',
'Automattic\\Jetpack\\Paths' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-status/src/class-paths.php',
'Automattic\\Jetpack\\Plugins_Installer' => __DIR__ . '/../..' . '/jetpack_vendor/automattic/jetpack-plugins-installer/src/class-plugins-installer.php',
@ -171,9 +179,9 @@ class ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4::$classMap;
}, null, ClassLoader::class);
}

View File

@ -101,17 +101,17 @@
},
{
"name": "automattic/jetpack-assets",
"version": "v1.17.20",
"version_normalized": "1.17.20.0",
"version": "v1.17.21",
"version_normalized": "1.17.21.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-assets.git",
"reference": "008539e8d84405d74318b590bb199c429b2da9a8"
"reference": "92c1ffc68b70886bd4f487220f3a815402ca997c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-assets/zipball/008539e8d84405d74318b590bb199c429b2da9a8",
"reference": "008539e8d84405d74318b590bb199c429b2da9a8",
"url": "https://api.github.com/repos/Automattic/jetpack-assets/zipball/92c1ffc68b70886bd4f487220f3a815402ca997c",
"reference": "92c1ffc68b70886bd4f487220f3a815402ca997c",
"shasum": ""
},
"require": {
@ -123,7 +123,7 @@
"wikimedia/testing-access-wrapper": "^1.0 || ^2.0",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:41:46+00:00",
"time": "2022-08-25T22:28:59+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -151,7 +151,7 @@
],
"description": "Asset management utilities for Jetpack ecosystem packages",
"support": {
"source": "https://github.com/Automattic/jetpack-assets/tree/v1.17.20"
"source": "https://github.com/Automattic/jetpack-assets/tree/v1.17.21"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-assets"
},
@ -264,23 +264,23 @@
},
{
"name": "automattic/jetpack-config",
"version": "v1.9.3",
"version_normalized": "1.9.3.0",
"version": "v1.9.6",
"version_normalized": "1.9.6.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-config.git",
"reference": "e267a9772cb000dd4b8a449ae273bf344bf84c05"
"reference": "28180996be7f2896528fa7f1c8eea9e10f3c6d32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-config/zipball/e267a9772cb000dd4b8a449ae273bf344bf84c05",
"reference": "e267a9772cb000dd4b8a449ae273bf344bf84c05",
"url": "https://api.github.com/repos/Automattic/jetpack-config/zipball/28180996be7f2896528fa7f1c8eea9e10f3c6d32",
"reference": "28180996be7f2896528fa7f1c8eea9e10f3c6d32",
"shasum": ""
},
"require-dev": {
"automattic/jetpack-changelogger": "^3.2"
},
"time": "2022-07-26T13:40:50+00:00",
"time": "2022-08-26T18:35:51+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -305,23 +305,23 @@
],
"description": "Jetpack configuration package that initializes other packages and configures Jetpack's functionality. Can be used as a base for all variants of Jetpack package usage.",
"support": {
"source": "https://github.com/Automattic/jetpack-config/tree/v1.9.3"
"source": "https://github.com/Automattic/jetpack-config/tree/v1.9.6"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-config"
},
{
"name": "automattic/jetpack-connection",
"version": "v1.41.7",
"version_normalized": "1.41.7.0",
"version": "v1.44.0",
"version_normalized": "1.44.0.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-connection.git",
"reference": "894df683e832fd09e382714f5eac533762d508d7"
"reference": "a8b81b56f6656a89096a6259d94e34721506f6ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-connection/zipball/894df683e832fd09e382714f5eac533762d508d7",
"reference": "894df683e832fd09e382714f5eac533762d508d7",
"url": "https://api.github.com/repos/Automattic/jetpack-connection/zipball/a8b81b56f6656a89096a6259d94e34721506f6ea",
"reference": "a8b81b56f6656a89096a6259d94e34721506f6ea",
"shasum": ""
},
"require": {
@ -338,7 +338,7 @@
"brain/monkey": "2.6.1",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:41:51+00:00",
"time": "2022-08-29T23:18:07+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -351,7 +351,7 @@
"link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.41.x-dev"
"dev-trunk": "1.44.x-dev"
}
},
"installation-source": "dist",
@ -368,7 +368,7 @@
],
"description": "Everything needed to connect to the Jetpack infrastructure",
"support": {
"source": "https://github.com/Automattic/jetpack-connection/tree/v1.41.7"
"source": "https://github.com/Automattic/jetpack-connection/tree/v1.44.0"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-connection"
},
@ -421,23 +421,70 @@
"install-path": "../../jetpack_vendor/automattic/jetpack-constants"
},
{
"name": "automattic/jetpack-identity-crisis",
"version": "v0.8.18",
"version_normalized": "0.8.18.0",
"name": "automattic/jetpack-device-detection",
"version": "v1.4.18",
"version_normalized": "1.4.18.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-identity-crisis.git",
"reference": "d75a568e7c36fc0e9aca6dece59e015dab9e2ef4"
"url": "https://github.com/Automattic/jetpack-device-detection.git",
"reference": "0536d4b530c2a5d991b7f83e478c34d21937e389"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-identity-crisis/zipball/d75a568e7c36fc0e9aca6dece59e015dab9e2ef4",
"reference": "d75a568e7c36fc0e9aca6dece59e015dab9e2ef4",
"url": "https://api.github.com/repos/Automattic/jetpack-device-detection/zipball/0536d4b530c2a5d991b7f83e478c34d21937e389",
"reference": "0536d4b530c2a5d991b7f83e478c34d21937e389",
"shasum": ""
},
"require-dev": {
"automattic/jetpack-changelogger": "^3.2",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:41:12+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
"mirror-repo": "Automattic/jetpack-device-detection",
"changelogger": {
"link-template": "https://github.com/Automattic/jetpack-device-detection/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.4.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0-or-later"
],
"description": "A way to detect device types based on User-Agent header.",
"support": {
"source": "https://github.com/Automattic/jetpack-device-detection/tree/v1.4.18"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-device-detection"
},
{
"name": "automattic/jetpack-identity-crisis",
"version": "v0.8.22",
"version_normalized": "0.8.22.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-identity-crisis.git",
"reference": "fdcc532dd4f484a6f45c491f322bd6d1b2ec7192"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-identity-crisis/zipball/fdcc532dd4f484a6f45c491f322bd6d1b2ec7192",
"reference": "fdcc532dd4f484a6f45c491f322bd6d1b2ec7192",
"shasum": ""
},
"require": {
"automattic/jetpack-assets": "^1.17",
"automattic/jetpack-connection": "^1.41",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-constants": "^1.6",
"automattic/jetpack-logo": "^1.5",
"automattic/jetpack-status": "^1.14"
@ -447,7 +494,7 @@
"automattic/wordbless": "@dev",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:42:10+00:00",
"time": "2022-08-29T23:18:26+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -475,34 +522,96 @@
],
"description": "Identity Crisis.",
"support": {
"source": "https://github.com/Automattic/jetpack-identity-crisis/tree/v0.8.18"
"source": "https://github.com/Automattic/jetpack-identity-crisis/tree/v0.8.22"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-identity-crisis"
},
{
"name": "automattic/jetpack-licensing",
"version": "v1.7.5",
"version_normalized": "1.7.5.0",
"name": "automattic/jetpack-jitm",
"version": "v2.2.26",
"version_normalized": "2.2.26.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-licensing.git",
"reference": "93dfddc5c61cd86e383b3ca59e946f8e7da9481e"
"url": "https://github.com/Automattic/jetpack-jitm.git",
"reference": "a657c3f38c181a523d290503db39faf589108747"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-licensing/zipball/93dfddc5c61cd86e383b3ca59e946f8e7da9481e",
"reference": "93dfddc5c61cd86e383b3ca59e946f8e7da9481e",
"url": "https://api.github.com/repos/Automattic/jetpack-jitm/zipball/a657c3f38c181a523d290503db39faf589108747",
"reference": "a657c3f38c181a523d290503db39faf589108747",
"shasum": ""
},
"require": {
"automattic/jetpack-connection": "^1.41"
"automattic/jetpack-a8c-mc-stats": "^1.4",
"automattic/jetpack-assets": "^1.17",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-device-detection": "^1.4",
"automattic/jetpack-logo": "^1.5",
"automattic/jetpack-partner": "^1.7",
"automattic/jetpack-redirect": "^1.7",
"automattic/jetpack-status": "^1.14"
},
"require-dev": {
"automattic/jetpack-changelogger": "^3.2",
"brain/monkey": "2.6.1",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-08-29T23:18:31+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
"mirror-repo": "Automattic/jetpack-jitm",
"textdomain": "jetpack-jitm",
"version-constants": {
"::PACKAGE_VERSION": "src/class-jitm.php"
},
"changelogger": {
"link-template": "https://github.com/Automattic/jetpack-jitm/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "2.2.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0-or-later"
],
"description": "Just in time messages for Jetpack",
"support": {
"source": "https://github.com/Automattic/jetpack-jitm/tree/v2.2.26"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-jitm"
},
{
"name": "automattic/jetpack-licensing",
"version": "v1.7.8",
"version_normalized": "1.7.8.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-licensing.git",
"reference": "3c521be2a5839930f57872715bd6777f848a0ae9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-licensing/zipball/3c521be2a5839930f57872715bd6777f848a0ae9",
"reference": "3c521be2a5839930f57872715bd6777f848a0ae9",
"shasum": ""
},
"require": {
"automattic/jetpack-connection": "^1.44"
},
"require-dev": {
"automattic/jetpack-changelogger": "^3.2",
"automattic/wordbless": "@dev",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:42:00+00:00",
"time": "2022-08-29T23:18:16+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -527,7 +636,7 @@
],
"description": "Everything needed to manage Jetpack licenses client-side.",
"support": {
"source": "https://github.com/Automattic/jetpack-licensing/tree/v1.7.5"
"source": "https://github.com/Automattic/jetpack-licensing/tree/v1.7.8"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-licensing"
},
@ -580,26 +689,27 @@
},
{
"name": "automattic/jetpack-my-jetpack",
"version": "v1.8.2",
"version_normalized": "1.8.2.0",
"version": "v2.0.3",
"version_normalized": "2.0.3.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-my-jetpack.git",
"reference": "15aa174a3dc5510001b8c5936dbcb5ac31171e8c"
"reference": "a750e63d5b0fbc406660d30354760bf7fe4237fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-my-jetpack/zipball/15aa174a3dc5510001b8c5936dbcb5ac31171e8c",
"reference": "15aa174a3dc5510001b8c5936dbcb5ac31171e8c",
"url": "https://api.github.com/repos/Automattic/jetpack-my-jetpack/zipball/a750e63d5b0fbc406660d30354760bf7fe4237fb",
"reference": "a750e63d5b0fbc406660d30354760bf7fe4237fb",
"shasum": ""
},
"require": {
"automattic/jetpack-admin-ui": "^0.2",
"automattic/jetpack-assets": "^1.17",
"automattic/jetpack-connection": "^1.41",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-constants": "^1.6",
"automattic/jetpack-jitm": "^2.2",
"automattic/jetpack-licensing": "^1.7",
"automattic/jetpack-plugins-installer": "^0.1",
"automattic/jetpack-plugins-installer": "^0.2",
"automattic/jetpack-redirect": "^1.7"
},
"require-dev": {
@ -607,7 +717,7 @@
"automattic/wordbless": "@dev",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-27T09:14:30+00:00",
"time": "2022-08-29T23:18:40+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -617,7 +727,7 @@
"link-template": "https://github.com/Automattic/jetpack-my-jetpack/compare/${old}...${new}"
},
"branch-alias": {
"dev-trunk": "1.8.x-dev"
"dev-trunk": "2.0.x-dev"
},
"version-constants": {
"::PACKAGE_VERSION": "src/class-initializer.php"
@ -636,10 +746,63 @@
],
"description": "WP Admin page with information and configuration shared among all Jetpack stand-alone plugins",
"support": {
"source": "https://github.com/Automattic/jetpack-my-jetpack/tree/v1.8.2"
"source": "https://github.com/Automattic/jetpack-my-jetpack/tree/v2.0.3"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-my-jetpack"
},
{
"name": "automattic/jetpack-partner",
"version": "v1.7.15",
"version_normalized": "1.7.15.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-partner.git",
"reference": "5c2a440acd886c3e1fe450f50c7a8cd070f71b41"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-partner/zipball/5c2a440acd886c3e1fe450f50c7a8cd070f71b41",
"reference": "5c2a440acd886c3e1fe450f50c7a8cd070f71b41",
"shasum": ""
},
"require": {
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-status": "^1.14"
},
"require-dev": {
"automattic/jetpack-changelogger": "^3.2",
"automattic/wordbless": "@dev",
"brain/monkey": "2.6.1",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-08-29T23:18:18+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
"mirror-repo": "Automattic/jetpack-partner",
"changelogger": {
"link-template": "https://github.com/Automattic/jetpack-partner/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.7.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0-or-later"
],
"description": "Support functions for Jetpack hosting partners.",
"support": {
"source": "https://github.com/Automattic/jetpack-partner/tree/v1.7.15"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-partner"
},
{
"name": "automattic/jetpack-password-checker",
"version": "v0.2.6",
@ -691,17 +854,17 @@
},
{
"name": "automattic/jetpack-plugins-installer",
"version": "v0.1.4",
"version_normalized": "0.1.4.0",
"version": "v0.2.0",
"version_normalized": "0.2.0.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-plugins-installer.git",
"reference": "fb54e31835599cf2064106285b0b3c94696dd1eb"
"reference": "cba99efa7653219b5b3136a191e44840be3f25ae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-plugins-installer/zipball/fb54e31835599cf2064106285b0b3c94696dd1eb",
"reference": "fb54e31835599cf2064106285b0b3c94696dd1eb",
"url": "https://api.github.com/repos/Automattic/jetpack-plugins-installer/zipball/cba99efa7653219b5b3136a191e44840be3f25ae",
"reference": "cba99efa7653219b5b3136a191e44840be3f25ae",
"shasum": ""
},
"require": {
@ -711,11 +874,11 @@
"automattic/jetpack-changelogger": "^3.2",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:41:41+00:00",
"time": "2022-08-23T12:40:45+00:00",
"type": "jetpack-library",
"extra": {
"branch-alias": {
"dev-trunk": "0.1.x-dev"
"dev-trunk": "0.2.x-dev"
},
"mirror-repo": "Automattic/jetpack-plugins-installer",
"changelogger": {
@ -736,7 +899,7 @@
],
"description": "Handle installation of plugins from WP.org",
"support": {
"source": "https://github.com/Automattic/jetpack-plugins-installer/tree/v0.1.4"
"source": "https://github.com/Automattic/jetpack-plugins-installer/tree/v0.2.0"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-plugins-installer"
},
@ -892,21 +1055,21 @@
},
{
"name": "automattic/jetpack-sync",
"version": "v1.37.0",
"version_normalized": "1.37.0.0",
"version": "v1.38.2",
"version_normalized": "1.38.2.0",
"source": {
"type": "git",
"url": "https://github.com/Automattic/jetpack-sync.git",
"reference": "053af021844a8651bac85e100fb524662a5947c2"
"reference": "f6a629ddb05df8553348018859a1d72b84f901bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Automattic/jetpack-sync/zipball/053af021844a8651bac85e100fb524662a5947c2",
"reference": "053af021844a8651bac85e100fb524662a5947c2",
"url": "https://api.github.com/repos/Automattic/jetpack-sync/zipball/f6a629ddb05df8553348018859a1d72b84f901bd",
"reference": "f6a629ddb05df8553348018859a1d72b84f901bd",
"shasum": ""
},
"require": {
"automattic/jetpack-connection": "^1.41",
"automattic/jetpack-connection": "^1.44",
"automattic/jetpack-constants": "^1.6",
"automattic/jetpack-identity-crisis": "^0.8",
"automattic/jetpack-password-checker": "^0.2",
@ -918,7 +1081,7 @@
"automattic/wordbless": "@dev",
"yoast/phpunit-polyfills": "1.0.3"
},
"time": "2022-07-26T13:42:16+00:00",
"time": "2022-08-29T23:18:34+00:00",
"type": "jetpack-library",
"extra": {
"autotagger": true,
@ -931,7 +1094,7 @@
"link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}"
},
"branch-alias": {
"dev-trunk": "1.37.x-dev"
"dev-trunk": "1.38.x-dev"
}
},
"installation-source": "dist",
@ -946,7 +1109,7 @@
],
"description": "Everything needed to allow syncing to the WP.com infrastructure.",
"support": {
"source": "https://github.com/Automattic/jetpack-sync/tree/v1.37.0"
"source": "https://github.com/Automattic/jetpack-sync/tree/v1.38.2"
},
"install-path": "../../jetpack_vendor/automattic/jetpack-sync"
}

View File

@ -29,12 +29,12 @@
'dev_requirement' => false,
),
'automattic/jetpack-assets' => array(
'pretty_version' => 'v1.17.20',
'version' => '1.17.20.0',
'pretty_version' => 'v1.17.21',
'version' => '1.17.21.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-assets',
'aliases' => array(),
'reference' => '008539e8d84405d74318b590bb199c429b2da9a8',
'reference' => '92c1ffc68b70886bd4f487220f3a815402ca997c',
'dev_requirement' => false,
),
'automattic/jetpack-autoloader' => array(
@ -56,21 +56,21 @@
'dev_requirement' => false,
),
'automattic/jetpack-config' => array(
'pretty_version' => 'v1.9.3',
'version' => '1.9.3.0',
'pretty_version' => 'v1.9.6',
'version' => '1.9.6.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-config',
'aliases' => array(),
'reference' => 'e267a9772cb000dd4b8a449ae273bf344bf84c05',
'reference' => '28180996be7f2896528fa7f1c8eea9e10f3c6d32',
'dev_requirement' => false,
),
'automattic/jetpack-connection' => array(
'pretty_version' => 'v1.41.7',
'version' => '1.41.7.0',
'pretty_version' => 'v1.44.0',
'version' => '1.44.0.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-connection',
'aliases' => array(),
'reference' => '894df683e832fd09e382714f5eac533762d508d7',
'reference' => 'a8b81b56f6656a89096a6259d94e34721506f6ea',
'dev_requirement' => false,
),
'automattic/jetpack-constants' => array(
@ -82,22 +82,40 @@
'reference' => '22fea671b3c621de63088cd0a2ff129683024023',
'dev_requirement' => false,
),
'automattic/jetpack-device-detection' => array(
'pretty_version' => 'v1.4.18',
'version' => '1.4.18.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-device-detection',
'aliases' => array(),
'reference' => '0536d4b530c2a5d991b7f83e478c34d21937e389',
'dev_requirement' => false,
),
'automattic/jetpack-identity-crisis' => array(
'pretty_version' => 'v0.8.18',
'version' => '0.8.18.0',
'pretty_version' => 'v0.8.22',
'version' => '0.8.22.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-identity-crisis',
'aliases' => array(),
'reference' => 'd75a568e7c36fc0e9aca6dece59e015dab9e2ef4',
'reference' => 'fdcc532dd4f484a6f45c491f322bd6d1b2ec7192',
'dev_requirement' => false,
),
'automattic/jetpack-jitm' => array(
'pretty_version' => 'v2.2.26',
'version' => '2.2.26.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-jitm',
'aliases' => array(),
'reference' => 'a657c3f38c181a523d290503db39faf589108747',
'dev_requirement' => false,
),
'automattic/jetpack-licensing' => array(
'pretty_version' => 'v1.7.5',
'version' => '1.7.5.0',
'pretty_version' => 'v1.7.8',
'version' => '1.7.8.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-licensing',
'aliases' => array(),
'reference' => '93dfddc5c61cd86e383b3ca59e946f8e7da9481e',
'reference' => '3c521be2a5839930f57872715bd6777f848a0ae9',
'dev_requirement' => false,
),
'automattic/jetpack-logo' => array(
@ -110,12 +128,21 @@
'dev_requirement' => false,
),
'automattic/jetpack-my-jetpack' => array(
'pretty_version' => 'v1.8.2',
'version' => '1.8.2.0',
'pretty_version' => 'v2.0.3',
'version' => '2.0.3.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-my-jetpack',
'aliases' => array(),
'reference' => '15aa174a3dc5510001b8c5936dbcb5ac31171e8c',
'reference' => 'a750e63d5b0fbc406660d30354760bf7fe4237fb',
'dev_requirement' => false,
),
'automattic/jetpack-partner' => array(
'pretty_version' => 'v1.7.15',
'version' => '1.7.15.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-partner',
'aliases' => array(),
'reference' => '5c2a440acd886c3e1fe450f50c7a8cd070f71b41',
'dev_requirement' => false,
),
'automattic/jetpack-password-checker' => array(
@ -128,12 +155,12 @@
'dev_requirement' => false,
),
'automattic/jetpack-plugins-installer' => array(
'pretty_version' => 'v0.1.4',
'version' => '0.1.4.0',
'pretty_version' => 'v0.2.0',
'version' => '0.2.0.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-plugins-installer',
'aliases' => array(),
'reference' => 'fb54e31835599cf2064106285b0b3c94696dd1eb',
'reference' => 'cba99efa7653219b5b3136a191e44840be3f25ae',
'dev_requirement' => false,
),
'automattic/jetpack-protect' => array(
@ -173,12 +200,12 @@
'dev_requirement' => false,
),
'automattic/jetpack-sync' => array(
'pretty_version' => 'v1.37.0',
'version' => '1.37.0.0',
'pretty_version' => 'v1.38.2',
'version' => '1.38.2.0',
'type' => 'jetpack-library',
'install_path' => __DIR__ . '/../../jetpack_vendor/automattic/jetpack-sync',
'aliases' => array(),
'reference' => '053af021844a8651bac85e100fb524662a5947c2',
'reference' => 'f6a629ddb05df8553348018859a1d72b84f901bd',
'dev_requirement' => false,
),
),

View File

@ -6,29 +6,25 @@ $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php'
),
'Automattic\\Jetpack\\Autoloader\\ManifestGenerator' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/ManifestGenerator.php'
),
'Automattic\\Jetpack\\Autoloader\\AutoloadProcessor' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php'
),
'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php'
),
'Automattic\\Jetpack\\Autoloader\\AutoloadFileWriter' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadFileWriter.php'
),
'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => array(
'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php'
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php'
),
'Jetpack_Protect' => array(
'version' => 'dev-trunk',
'path' => $baseDir . '/src/class-jetpack-protect.php'
'Automattic\\Jetpack\\Autoloader\\AutoloadProcessor' => array(
'version' => '2.11.7.0',
'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php'
),
'Automattic\\Jetpack\\Protect\\Site_Health' => array(
'version' => 'dev-trunk',
@ -38,300 +34,304 @@ return array(
'version' => 'dev-trunk',
'path' => $baseDir . '/src/class-status.php'
),
'Jetpack_Protect' => array(
'version' => 'dev-trunk',
'path' => $baseDir . '/src/class-jetpack-protect.php'
),
'Automattic\\Jetpack\\Sync\\Package_Version' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-package-version.php'
),
'Automattic\\Jetpack\\Sync\\Listener' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-listener.php'
),
'Automattic\\Jetpack\\Sync\\Default_Filter_Settings' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-default-filter-settings.php'
),
'Automattic\\Jetpack\\Sync\\Functions' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-functions.php'
),
'Automattic\\Jetpack\\Sync\\Modules' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-modules.php'
),
'Automattic\\Jetpack\\Sync\\Users' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-users.php'
),
'Automattic\\Jetpack\\Sync\\Main' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-main.php'
),
'Automattic\\Jetpack\\Sync\\Utils' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-utils.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Network_Options' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-network-options.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Attachments' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-attachments.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Users' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-users.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Term_Relationships' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-term-relationships.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Protect' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-protect.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\WP_Super_Cache' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-wp-super-cache.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Terms' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-terms.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Comments' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-comments.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Full_Sync' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-full-sync.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Plugins' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-plugins.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Themes' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-themes.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Module' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-module.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Options' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-options.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Full_Sync_Immediately' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-full-sync-immediately.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Stats' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-stats.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Import' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-import.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\WooCommerce' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-woocommerce.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Menus' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-menus.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Search' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-search.php'
'Automattic\\Jetpack\\Sync\\Modules\\Module' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-module.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Callables' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-callables.php'
'Automattic\\Jetpack\\Sync\\Modules\\Terms' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-terms.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Term_Relationships' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-term-relationships.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Import' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-import.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Network_Options' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-network-options.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Users' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-users.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Options' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-options.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\WooCommerce' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-woocommerce.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Attachments' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-attachments.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Comments' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-comments.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\WP_Super_Cache' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-wp-super-cache.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Protect' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-protect.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Posts' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-posts.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Meta' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-meta.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Full_Sync' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-full-sync.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Full_Sync_Immediately' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-full-sync-immediately.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Search' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-search.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Stats' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-stats.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Callables' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-callables.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Plugins' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-plugins.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Updates' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-updates.php'
),
'Automattic\\Jetpack\\Sync\\Modules\\Constants' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-constants.php'
),
'Automattic\\Jetpack\\Sync\\REST_Endpoints' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-rest-endpoints.php'
'Automattic\\Jetpack\\Sync\\Modules\\Themes' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/modules/class-themes.php'
),
'Automattic\\Jetpack\\Sync\\Health' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-health.php'
),
'Automattic\\Jetpack\\Sync\\Settings' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-settings.php'
),
'Automattic\\Jetpack\\Sync\\Listener' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-listener.php'
),
'Automattic\\Jetpack\\Sync\\JSON_Deflate_Array_Codec' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-json-deflate-array-codec.php'
),
'Automattic\\Jetpack\\Sync\\Default_Filter_Settings' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-default-filter-settings.php'
),
'Automattic\\Jetpack\\Sync\\REST_Sender' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-rest-sender.php'
),
'Automattic\\Jetpack\\Sync\\Server' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-server.php'
),
'Automattic\\Jetpack\\Sync\\Defaults' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-defaults.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-replicastore.php'
),
'Automattic\\Jetpack\\Sync\\Codec_Interface' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/interface-codec.php'
),
'Automattic\\Jetpack\\Sync\\Sender' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-sender.php'
),
'Automattic\\Jetpack\\Sync\\Lock' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-lock.php'
),
'Automattic\\Jetpack\\Sync\\Actions' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-actions.php'
'Automattic\\Jetpack\\Sync\\Main' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-main.php'
),
'Automattic\\Jetpack\\Sync\\Simple_Codec' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-simple-codec.php'
),
'Automattic\\Jetpack\\Sync\\Queue_Buffer' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-queue-buffer.php'
),
'Automattic\\Jetpack\\Sync\\Settings' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-settings.php'
),
'Automattic\\Jetpack\\Sync\\Health' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-health.php'
),
'Automattic\\Jetpack\\Sync\\Users' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-users.php'
),
'Automattic\\Jetpack\\Sync\\REST_Endpoints' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-rest-endpoints.php'
),
'Automattic\\Jetpack\\Sync\\Sender' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-sender.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore_Interface' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/interface-replicastore.php'
),
'Automattic\\Jetpack\\Sync\\Dedicated_Sender' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-dedicated-sender.php'
),
'Automattic\\Jetpack\\Sync\\JSON_Deflate_Array_Codec' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-json-deflate-array-codec.php'
),
'Automattic\\Jetpack\\Sync\\Modules' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-modules.php'
),
'Automattic\\Jetpack\\Sync\\Queue' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-queue.php'
),
'Automattic\\Jetpack\\Sync\\Defaults' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-defaults.php'
),
'Automattic\\Jetpack\\Sync\\Lock' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-lock.php'
),
'Automattic\\Jetpack\\Sync\\Actions' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-actions.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore\\Table_Checksum_Usermeta' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/replicastore/class-table-checksum-usermeta.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore\\Table_Checksum_Users' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/replicastore/class-table-checksum-users.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore\\Table_Checksum' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/replicastore/class-table-checksum.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore\\Table_Checksum_Usermeta' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/replicastore/class-table-checksum-usermeta.php'
'Automattic\\Jetpack\\Sync\\Codec_Interface' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/interface-codec.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore_Interface' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/interface-replicastore.php'
'Automattic\\Jetpack\\Sync\\Utils' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-utils.php'
),
'Automattic\\Jetpack\\Sync\\Package_Version' => array(
'version' => '1.37.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-package-version.php'
'Automattic\\Jetpack\\Sync\\Server' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-server.php'
),
'Automattic\\Jetpack\\Sync\\Replicastore' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-replicastore.php'
),
'Automattic\\Jetpack\\Sync\\REST_Sender' => array(
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-rest-sender.php'
),
'Automattic\\Jetpack\\Sync\\Data_Settings' => array(
'version' => '1.37.0.0',
'version' => '1.38.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-sync/src/class-data-settings.php'
),
'Automattic\\Jetpack\\My_Jetpack\\REST_Products' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-products.php'
),
'Automattic\\Jetpack\\My_Jetpack\\REST_Purchases' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-purchases.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products' => array(
'version' => '1.8.2.0',
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-products.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Videopress' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-videopress.php'
'Automattic\\Jetpack\\My_Jetpack\\Wpcom_Products' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-wpcom-products.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Security' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-security.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Module_Product' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-module-product.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Backup' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-backup.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Protect' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-protect.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Hybrid_Product' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-hybrid-product.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Search_Stats' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-search-stats.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Crm' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-crm.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Social' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-social.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Boost' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-boost.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Product' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-product.php'
'Automattic\\Jetpack\\My_Jetpack\\Initializer' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-initializer.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Anti_Spam' => array(
'version' => '1.8.2.0',
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-anti-spam.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Search' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-search.php'
'Automattic\\Jetpack\\My_Jetpack\\Product' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-product.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Backup' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-backup.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Hybrid_Product' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-hybrid-product.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Extras' => array(
'version' => '1.8.2.0',
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-extras.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Scan' => array(
'version' => '1.8.2.0',
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-scan.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Wpcom_Products' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-wpcom-products.php'
'Automattic\\Jetpack\\My_Jetpack\\Products\\Crm' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-crm.php'
),
'Automattic\\Jetpack\\My_Jetpack\\REST_Purchases' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-purchases.php'
'Automattic\\Jetpack\\My_Jetpack\\Products\\Protect' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-protect.php'
),
'Automattic\\Jetpack\\My_Jetpack\\REST_Products' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-rest-products.php'
'Automattic\\Jetpack\\My_Jetpack\\Products\\Search_Stats' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-search-stats.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Initializer' => array(
'version' => '1.8.2.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/class-initializer.php'
'Automattic\\Jetpack\\My_Jetpack\\Products\\Search' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-search.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Videopress' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-videopress.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Module_Product' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-module-product.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Boost' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-boost.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Social' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-social.php'
),
'Automattic\\Jetpack\\My_Jetpack\\Products\\Security' => array(
'version' => '2.0.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-my-jetpack/src/products/class-security.php'
),
'Automattic\\Jetpack\\Config' => array(
'version' => '1.9.3.0',
'version' => '1.9.6.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-config/src/class-config.php'
),
'Automattic\\Jetpack\\Composer\\Manager' => array(
@ -342,186 +342,218 @@ return array(
'version' => '1.1.4.0',
'path' => $vendorDir . '/automattic/jetpack-composer-plugin/src/class-plugin.php'
),
'Automattic\\Jetpack\\Plugins_Installer' => array(
'version' => '0.1.4.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-plugins-installer/src/class-plugins-installer.php'
),
'Automattic\\Jetpack\\Automatic_Install_Skin' => array(
'version' => '0.1.4.0',
'version' => '0.2.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-plugins-installer/src/class-automatic-install-skin.php'
),
'Automattic\\Jetpack\\Plugins_Installer' => array(
'version' => '0.2.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-plugins-installer/src/class-plugins-installer.php'
),
'Automattic\\Jetpack\\Password_Checker' => array(
'version' => '0.2.6.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-password-checker/src/class-password-checker.php'
),
'Automattic\\Jetpack\\Licensing\\Endpoints' => array(
'version' => '1.7.5.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-licensing/src/class-endpoints.php'
),
'Automattic\\Jetpack\\Licensing' => array(
'version' => '1.7.5.0',
'version' => '1.7.8.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-licensing/src/class-licensing.php'
),
'Automattic\\Jetpack\\Licensing\\Endpoints' => array(
'version' => '1.7.8.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-licensing/src/class-endpoints.php'
),
'Automattic\\Jetpack\\JITMS\\Pre_Connection_JITM' => array(
'version' => '2.2.26.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-pre-connection-jitm.php'
),
'Automattic\\Jetpack\\JITMS\\Rest_Api_Endpoints' => array(
'version' => '2.2.26.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-rest-api-endpoints.php'
),
'Automattic\\Jetpack\\JITMS\\JITM' => array(
'version' => '2.2.26.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-jitm.php'
),
'Automattic\\Jetpack\\JITMS\\Post_Connection_JITM' => array(
'version' => '2.2.26.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-jitm/src/class-post-connection-jitm.php'
),
'Automattic\\Jetpack\\Identity_Crisis' => array(
'version' => '0.8.22.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-identity-crisis.php'
),
'Automattic\\Jetpack\\IdentityCrisis\\REST_Endpoints' => array(
'version' => '0.8.18.0',
'version' => '0.8.22.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-rest-endpoints.php'
),
'Automattic\\Jetpack\\IdentityCrisis\\UI' => array(
'version' => '0.8.18.0',
'version' => '0.8.22.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php'
),
'Automattic\\Jetpack\\Identity_Crisis' => array(
'version' => '0.8.18.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-identity-crisis.php'
'Automattic\\Jetpack\\Partner_Coupon' => array(
'version' => '1.7.15.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-partner/src/class-partner-coupon.php'
),
'Automattic\\Jetpack\\Partner' => array(
'version' => '1.7.15.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-partner/src/class-partner.php'
),
'Automattic\\Jetpack\\Device_Detection\\User_Agent_Info' => array(
'version' => '1.4.18.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-device-detection/src/class-user-agent-info.php'
),
'Automattic\\Jetpack\\Device_Detection' => array(
'version' => '1.4.18.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-device-detection/src/class-device-detection.php'
),
'Automattic\\Jetpack\\Assets\\Logo' => array(
'version' => '1.5.17.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-logo/src/class-logo.php'
),
'Automattic\\Jetpack\\Assets' => array(
'version' => '1.17.20.0',
'version' => '1.17.21.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-assets/src/class-assets.php'
),
'Automattic\\Jetpack\\Assets\\Semver' => array(
'version' => '1.17.20.0',
'version' => '1.17.21.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-assets/src/class-semver.php'
),
'Jetpack_Tracks_Event' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-tracks-event.php'
),
'Jetpack_Options' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-options.php'
),
'Jetpack_IXR_Client' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-ixr-client.php'
),
'Jetpack_Tracks_Client' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-tracks-client.php'
),
'Jetpack_Signature' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-signature.php'
),
'Jetpack_IXR_ClientMulticall' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-ixr-clientmulticall.php'
),
'Jetpack_Options' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-options.php'
),
'Jetpack_Tracks_Event' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-tracks-event.php'
),
'Jetpack_Tracks_Client' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-tracks-client.php'
),
'Jetpack_IXR_Client' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-ixr-client.php'
),
'Jetpack_XMLRPC_Server' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-xmlrpc-server.php'
),
'Automattic\\Jetpack\\Connection\\XMLRPC_Connector' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-xmlrpc-connector.php'
'Jetpack_Signature' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/legacy/class-jetpack-signature.php'
),
'Automattic\\Jetpack\\Connection\\Webhooks' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php'
'Automattic\\Jetpack\\Connection\\Package_Version' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-package-version.php'
),
'Automattic\\Jetpack\\Connection\\Nonce_Handler' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-nonce-handler.php'
),
'Automattic\\Jetpack\\Connection\\Secrets' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-secrets.php'
),
'Automattic\\Jetpack\\Connection\\Manager_Interface' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/interface-manager.php'
),
'Automattic\\Jetpack\\Connection\\Manager' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-manager.php'
),
'Automattic\\Jetpack\\Connection\\Tokens' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-tokens.php'
),
'Automattic\\Jetpack\\Connection\\Client' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-client.php'
),
'Automattic\\Jetpack\\Heartbeat' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-heartbeat.php'
),
'Automattic\\Jetpack\\Connection\\Plugin' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-plugin.php'
),
'Automattic\\Jetpack\\Connection\\XMLRPC_Connector' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-xmlrpc-connector.php'
),
'Automattic\\Jetpack\\Connection\\REST_Connector' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-rest-connector.php'
),
'Automattic\\Jetpack\\Terms_Of_Service' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-terms-of-service.php'
),
'Automattic\\Jetpack\\Connection\\Urls' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-urls.php'
),
'Automattic\\Jetpack\\Connection\\XMLRPC_Async_Call' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-xmlrpc-async-call.php'
),
'Automattic\\Jetpack\\Connection\\Webhooks\\Authorize_Redirect' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/webhooks/class-authorize-redirect.php'
),
'Automattic\\Jetpack\\Connection\\Utils' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-utils.php'
'Automattic\\Jetpack\\Terms_Of_Service' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-terms-of-service.php'
),
'Automattic\\Jetpack\\Connection\\Package_Version_Tracker' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-package-version-tracker.php'
),
'Automattic\\Jetpack\\Heartbeat' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-heartbeat.php'
),
'Automattic\\Jetpack\\Connection\\Nonce_Handler' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-nonce-handler.php'
'Automattic\\Jetpack\\Connection\\Webhooks' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php'
),
'Automattic\\Jetpack\\Tracking' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-tracking.php'
),
'Automattic\\Jetpack\\Connection\\Tokens' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-tokens.php'
),
'Automattic\\Jetpack\\Connection\\Secrets' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-secrets.php'
),
'Automattic\\Jetpack\\Connection\\Manager' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-manager.php'
),
'Automattic\\Jetpack\\Connection\\Plugin' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-plugin.php'
),
'Automattic\\Jetpack\\Connection\\Client' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-client.php'
),
'Automattic\\Jetpack\\Connection\\Rest_Authentication' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-rest-authentication.php'
),
'Automattic\\Jetpack\\Connection\\Plugin_Storage' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-plugin-storage.php'
),
'Automattic\\Jetpack\\Connection\\Error_Handler' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-error-handler.php'
),
'Automattic\\Jetpack\\Connection\\Package_Version' => array(
'version' => '1.41.7.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-package-version.php'
),
'Automattic\\Jetpack\\Connection\\Server_Sandbox' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-server-sandbox.php'
),
'Automattic\\Jetpack\\Connection\\Urls' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-urls.php'
),
'Automattic\\Jetpack\\Connection\\Plugin_Storage' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-plugin-storage.php'
),
'Automattic\\Jetpack\\Connection\\Package_Version_Tracker' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-package-version-tracker.php'
),
'Automattic\\Jetpack\\Connection\\Initial_State' => array(
'version' => '1.41.7.0',
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-initial-state.php'
),
'Automattic\\Jetpack\\Connection\\Utils' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-utils.php'
),
'Automattic\\Jetpack\\Connection\\Error_Handler' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-error-handler.php'
),
'Automattic\\Jetpack\\Connection\\Rest_Authentication' => array(
'version' => '1.44.0.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-connection/src/class-rest-authentication.php'
),
'Automattic\\Jetpack\\Roles' => array(
'version' => '1.4.17.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-roles/src/class-roles.php'
),
'Automattic\\Jetpack\\Redirect' => array(
'version' => '1.7.18.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-redirect/src/class-redirect.php'
),
'Automattic\\Jetpack\\Admin_UI\\Admin_Menu' => array(
'version' => '0.2.11.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-admin-ui/src/class-admin-menu.php'
),
'Automattic\\Jetpack\\Redirect' => array(
'version' => '1.7.18.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-redirect/src/class-redirect.php'
),
'Automattic\\Jetpack\\A8c_Mc_Stats' => array(
'version' => '1.4.15.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-a8c-mc-stats/src/class-a8c-mc-stats.php'
@ -530,25 +562,9 @@ return array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-cache.php'
),
'Automattic\\Jetpack\\Modules' => array(
'Automattic\\Jetpack\\CookieState' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-modules.php'
),
'Automattic\\Jetpack\\Errors' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-errors.php'
),
'Automattic\\Jetpack\\Status\\Host' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-host.php'
),
'Automattic\\Jetpack\\Status' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-status.php'
),
'Automattic\\Jetpack\\Paths' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-paths.php'
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php'
),
'Automattic\\Jetpack\\Status\\Visitor' => array(
'version' => '1.14.3.0',
@ -558,9 +574,25 @@ return array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-files.php'
),
'Automattic\\Jetpack\\CookieState' => array(
'Automattic\\Jetpack\\Status' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php'
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-status.php'
),
'Automattic\\Jetpack\\Modules' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-modules.php'
),
'Automattic\\Jetpack\\Paths' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-paths.php'
),
'Automattic\\Jetpack\\Status\\Host' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-host.php'
),
'Automattic\\Jetpack\\Errors' => array(
'version' => '1.14.3.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-status/src/class-errors.php'
),
'Automattic\\Jetpack\\Constants' => array(
'version' => '1.6.18.0',

View File

@ -7,7 +7,7 @@ $baseDir = dirname($vendorDir);
return array(
'3773ef3f09c37da5478d578e32b03a4b' => array(
'version' => '1.17.20.0',
'version' => '1.17.21.0',
'path' => $baseDir . '/jetpack_vendor/automattic/jetpack-assets/actions.php'
),
);

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore

View File

@ -5,7 +5,7 @@
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_2;
namespace Automattic\Jetpack\Autoloader\jpc4802e05bbcf59fd3b6350e8d3e5482c_protectⓥ1_0_4;
// phpcs:ignore