From c84655559e06cadf921138b698de695dcf999772 Mon Sep 17 00:00:00 2001 From: Przemek Kuliga Date: Wed, 20 Mar 2024 20:43:06 +0100 Subject: [PATCH 1/9] Subscriptions: Apply the subscriber logout function globally (#36441) --- projects/packages/jitm/.phan/baseline.php | 2 +- .../changelog/update-global-subscriber-logout | 4 ++++ projects/plugins/jetpack/.phan/baseline.php | 2 +- .../changelog/update-global-subscriber-logout | 4 ++++ ...ss-abstract-token-subscription-service.php | 24 +++++++++---------- .../subscriber-login/subscriber-login.php | 12 ---------- .../memberships/class-jetpack-memberships.php | 11 +++++++++ 7 files changed, 32 insertions(+), 27 deletions(-) create mode 100644 projects/packages/jitm/changelog/update-global-subscriber-logout create mode 100644 projects/plugins/jetpack/changelog/update-global-subscriber-logout diff --git a/projects/packages/jitm/.phan/baseline.php b/projects/packages/jitm/.phan/baseline.php index d65d4acf24d5d..b6b397b5f2e4a 100644 --- a/projects/packages/jitm/.phan/baseline.php +++ b/projects/packages/jitm/.phan/baseline.php @@ -14,13 +14,13 @@ // PhanTypeMismatchReturn : 3 occurrences // PhanTypeMismatchArgumentProbablyReal : 2 occurrences // PhanUndeclaredClassMethod : 2 occurrences + // PhanUndeclaredMethod : 2 occurrences // PhanUndeclaredTypeParameter : 2 occurrences // PhanPluginSimplifyExpressionBool : 1 occurrence // PhanTypeInvalidDimOffset : 1 occurrence // PhanTypeMismatchArgument : 1 occurrence // PhanTypeMismatchProperty : 1 occurrence // PhanUndeclaredFunction : 1 occurrence - // PhanUndeclaredMethod : 1 occurrence // PhanUndeclaredTypeProperty : 1 occurrence // PhanUndeclaredTypeReturnType : 1 occurrence // PhanUnreferencedUseNormal : 1 occurrence diff --git a/projects/packages/jitm/changelog/update-global-subscriber-logout b/projects/packages/jitm/changelog/update-global-subscriber-logout new file mode 100644 index 0000000000000..050fbb380820c --- /dev/null +++ b/projects/packages/jitm/changelog/update-global-subscriber-logout @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Update Phan baselines diff --git a/projects/plugins/jetpack/.phan/baseline.php b/projects/plugins/jetpack/.phan/baseline.php index 2e21204692e15..290e6365753b6 100644 --- a/projects/plugins/jetpack/.phan/baseline.php +++ b/projects/plugins/jetpack/.phan/baseline.php @@ -245,7 +245,7 @@ 'extensions/blocks/podcast-player/templates/playlist-track.php' => ['PhanUndeclaredGlobalVariable'], 'extensions/blocks/premium-content/_inc/access-check.php' => ['PhanUndeclaredClassMethod'], 'extensions/blocks/premium-content/_inc/legacy-buttons.php' => ['PhanUndeclaredClassMethod'], - 'extensions/blocks/premium-content/_inc/subscription-service/class-abstract-token-subscription-service.php' => ['PhanParamSignatureMismatch', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchArgument', 'PhanTypeSuspiciousNonTraversableForeach', 'PhanUndeclaredClassProperty', 'PhanUndeclaredConstant', 'PhanUndeclaredMethod', 'PhanUndeclaredTypeParameter', 'PhanUnextractableAnnotationSuffix'], + 'extensions/blocks/premium-content/_inc/subscription-service/class-abstract-token-subscription-service.php' => ['PhanParamSignatureMismatch', 'PhanTypeMismatchArgument', 'PhanTypeSuspiciousNonTraversableForeach', 'PhanUndeclaredClassProperty', 'PhanUndeclaredMethod', 'PhanUndeclaredTypeParameter', 'PhanUnextractableAnnotationSuffix'], 'extensions/blocks/premium-content/_inc/subscription-service/class-jetpack-token-subscription-service.php' => ['PhanTypeMismatchReturn'], 'extensions/blocks/premium-content/_inc/subscription-service/class-jwt.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnNullable'], 'extensions/blocks/premium-content/_inc/subscription-service/class-wpcom-online-subscription-service.php' => ['PhanParamSignatureMismatch', 'PhanUndeclaredClassMethod', 'PhanUndeclaredConstant'], diff --git a/projects/plugins/jetpack/changelog/update-global-subscriber-logout b/projects/plugins/jetpack/changelog/update-global-subscriber-logout new file mode 100644 index 0000000000000..1865a4ceec35d --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-global-subscriber-logout @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Subscriptions: Apply the subscriber logout function globally diff --git a/projects/plugins/jetpack/extensions/blocks/premium-content/_inc/subscription-service/class-abstract-token-subscription-service.php b/projects/plugins/jetpack/extensions/blocks/premium-content/_inc/subscription-service/class-abstract-token-subscription-service.php index fe8c5cd2f1658..f01fa948da2ab 100644 --- a/projects/plugins/jetpack/extensions/blocks/premium-content/_inc/subscription-service/class-abstract-token-subscription-service.php +++ b/projects/plugins/jetpack/extensions/blocks/premium-content/_inc/subscription-service/class-abstract-token-subscription-service.php @@ -459,31 +459,29 @@ private function set_token_cookie( $token ) { return; } - if ( ! empty( $token ) && false === headers_sent() ) { + if ( ! empty( $token ) && ! headers_sent() ) { // phpcs:ignore Jetpack.Functions.SetCookie.FoundNonHTTPOnlyFalse - setcookie( self::JWT_AUTH_TOKEN_COOKIE_NAME, $token, strtotime( '+1 month' ), '/', COOKIE_DOMAIN, is_ssl(), false ); + setcookie( self::JWT_AUTH_TOKEN_COOKIE_NAME, $token, strtotime( '+1 month' ), '/', '', is_ssl(), false ); } } /** * Clear the auth cookie. - * - * @param string $cookie_domain Domain to remove cookie from. - * - * @return void */ - public static function clear_token_cookie( $cookie_domain = '' ) { + public static function clear_token_cookie() { if ( defined( 'TESTING_IN_JETPACK' ) && TESTING_IN_JETPACK ) { return; } - if ( self::has_token_from_cookie() ) { - unset( $_COOKIE[ self::JWT_AUTH_TOKEN_COOKIE_NAME ] ); - setcookie( self::JWT_AUTH_TOKEN_COOKIE_NAME, '', 1, '/', COOKIE_DOMAIN, is_ssl(), true ); + if ( ! self::has_token_from_cookie() ) { + return; + } + + unset( $_COOKIE[ self::JWT_AUTH_TOKEN_COOKIE_NAME ] ); - if ( ! empty( $cookie_domain ) ) { - setcookie( self::JWT_AUTH_TOKEN_COOKIE_NAME, '', 1, '/', $cookie_domain, is_ssl(), true ); - } + if ( ! headers_sent() ) { + // phpcs:ignore Jetpack.Functions.SetCookie.FoundNonHTTPOnlyFalse + setcookie( self::JWT_AUTH_TOKEN_COOKIE_NAME, '', 1, '/', '', is_ssl(), false ); } } diff --git a/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php b/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php index a775c5c73d655..070818be41f8a 100644 --- a/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php +++ b/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php @@ -35,21 +35,9 @@ function register_block() { __DIR__, array( 'render_callback' => __NAMESPACE__ . '\render_block' ) ); - - add_action( 'wp_logout', __NAMESPACE__ . '\subscriber_logout' ); } add_action( 'init', __NAMESPACE__ . '\register_block' ); -/** - * Logs the subscriber out by clearing out the premium content cookie. - * - * @return void - */ -function subscriber_logout() { - $cookie_domain = wp_parse_url( get_site_url(), PHP_URL_HOST ); - Abstract_Token_Subscription_Service::clear_token_cookie( $cookie_domain ); -} - /** * Returns current URL. * diff --git a/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php b/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php index 4fe52cc3eca14..4f045557052ae 100644 --- a/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php +++ b/projects/plugins/jetpack/modules/memberships/class-jetpack-memberships.php @@ -203,6 +203,17 @@ public function init_hook_action() { add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_rest_api_types' ) ); add_filter( 'jetpack_sync_post_meta_whitelist', array( $this, 'allow_sync_post_meta' ) ); $this->setup_cpts(); + + if ( Jetpack::is_module_active( 'subscriptions' ) && jetpack_is_frontend() ) { + add_action( 'wp_logout', array( $this, 'subscriber_logout' ) ); + } + } + + /** + * Logs the subscriber out by clearing out the premium content cookie. + */ + public function subscriber_logout() { + Abstract_Token_Subscription_Service::clear_token_cookie(); } /** From b032ce288db4e5a05b7d9dd2c6f07c55ba0ff8ae Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Wed, 20 Mar 2024 17:25:08 -0300 Subject: [PATCH 2/9] fix malformed property name productSlug (#36486) --- .../my-jetpack/_inc/components/product-interstitial/index.jsx | 4 ++-- .../my-jetpack/changelog/fix-interstitial-event-property-name | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 projects/packages/my-jetpack/changelog/fix-interstitial-event-property-name diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx b/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx index fb3eba3a3b087..74ab5ae301519 100644 --- a/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial/index.jsx @@ -96,7 +96,7 @@ export default function ProductInterstitial( { ( isFreePlan = false, customSlug = null ) => { recordEvent( 'jetpack_myjetpack_product_interstitial_add_link_click', { product: customSlug ?? slug, - productSlug: getProductSlugForTrackEvent( isFreePlan ), + product_slug: getProductSlugForTrackEvent( isFreePlan ), } ); }, [ recordEvent, slug, getProductSlugForTrackEvent ] @@ -106,7 +106,7 @@ export default function ProductInterstitial( { ( isFreePlan = false ) => { recordEvent( 'jetpack_myjetpack_product_interstitial_add_link_click', { product: bundle, - productSlug: getProductSlugForTrackEvent( isFreePlan ), + product_slug: getProductSlugForTrackEvent( isFreePlan ), } ); }, [ recordEvent, bundle, getProductSlugForTrackEvent ] diff --git a/projects/packages/my-jetpack/changelog/fix-interstitial-event-property-name b/projects/packages/my-jetpack/changelog/fix-interstitial-event-property-name new file mode 100644 index 0000000000000..bb7ff94203ef0 --- /dev/null +++ b/projects/packages/my-jetpack/changelog/fix-interstitial-event-property-name @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +My Jetpack: fix interstitial event property malformed name productSlug -> product_slug From 6da32eb120c638e40f5ff2cd6667dd1236ec2c58 Mon Sep 17 00:00:00 2001 From: Christian Gastrell Date: Wed, 20 Mar 2024 18:25:30 -0300 Subject: [PATCH 3/9] add jetpack ai product page view event (#36488) --- .../product-interstitial/jetpack-ai/product-page.jsx | 7 +++++++ .../changelog/add-my-jetpack-ai-product-page-view-event | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 projects/packages/my-jetpack/changelog/add-my-jetpack-ai-product-page-view-event diff --git a/projects/packages/my-jetpack/_inc/components/product-interstitial/jetpack-ai/product-page.jsx b/projects/packages/my-jetpack/_inc/components/product-interstitial/jetpack-ai/product-page.jsx index 620ea47c9106e..b64da7fcc06bf 100644 --- a/projects/packages/my-jetpack/_inc/components/product-interstitial/jetpack-ai/product-page.jsx +++ b/projects/packages/my-jetpack/_inc/components/product-interstitial/jetpack-ai/product-page.jsx @@ -128,6 +128,13 @@ export default function () { const onNoticeClose = useCallback( () => setShowNotice( false ), [] ); + useEffect( () => { + recordEvent( 'jetpack_ai_myjetpack_product_page_view', { + current_tier_slug: currentTier?.slug || '', + requests_count: allTimeRequests, + } ); + }, [ allTimeRequests, currentTier?.slug, recordEvent ] ); + useEffect( () => { setShowNotice( showRenewalNotice || showUpgradeNotice ); }, [ showRenewalNotice, showUpgradeNotice ] ); diff --git a/projects/packages/my-jetpack/changelog/add-my-jetpack-ai-product-page-view-event b/projects/packages/my-jetpack/changelog/add-my-jetpack-ai-product-page-view-event new file mode 100644 index 0000000000000..81130c1c5118a --- /dev/null +++ b/projects/packages/my-jetpack/changelog/add-my-jetpack-ai-product-page-view-event @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +My Jetpack: add AI product page view event From e6c4923cfae30ebb8b049e91bb3f811bb8892ff6 Mon Sep 17 00:00:00 2001 From: Kosta Date: Thu, 21 Mar 2024 05:29:17 +0100 Subject: [PATCH 4/9] Verbum Comments: Add verbum settings for simple sites (#36367) Co-authored-by: Anthony Grullon --- .../changelog/add-verbum-settings | 4 + .../packages/jetpack-mu-wpcom/composer.json | 2 +- .../packages/jetpack-mu-wpcom/package.json | 2 +- .../src/class-jetpack-mu-wpcom.php | 17 +- .../assets/class-verbum-admin.php | 304 ++++++++++++++++++ .../verbum-comments/class-verbum-comments.php | 9 +- .../changelog/add-verbum-settings | 5 + .../plugins/mu-wpcom-plugin/composer.json | 2 +- .../plugins/mu-wpcom-plugin/composer.lock | 4 +- .../mu-wpcom-plugin/mu-wpcom-plugin.php | 2 +- projects/plugins/mu-wpcom-plugin/package.json | 2 +- 11 files changed, 344 insertions(+), 9 deletions(-) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/add-verbum-settings create mode 100644 projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/assets/class-verbum-admin.php create mode 100644 projects/plugins/mu-wpcom-plugin/changelog/add-verbum-settings diff --git a/projects/packages/jetpack-mu-wpcom/changelog/add-verbum-settings b/projects/packages/jetpack-mu-wpcom/changelog/add-verbum-settings new file mode 100644 index 0000000000000..c4bdd7ec44632 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/add-verbum-settings @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Added additional settings for commenting on simple sites diff --git a/projects/packages/jetpack-mu-wpcom/composer.json b/projects/packages/jetpack-mu-wpcom/composer.json index 9563bfc247d12..fee78ecece62d 100644 --- a/projects/packages/jetpack-mu-wpcom/composer.json +++ b/projects/packages/jetpack-mu-wpcom/composer.json @@ -51,7 +51,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "5.18.x-dev" + "dev-trunk": "5.19.x-dev" }, "textdomain": "jetpack-mu-wpcom", "version-constants": { diff --git a/projects/packages/jetpack-mu-wpcom/package.json b/projects/packages/jetpack-mu-wpcom/package.json index b6d0042f0778e..0c0a0107df360 100644 --- a/projects/packages/jetpack-mu-wpcom/package.json +++ b/projects/packages/jetpack-mu-wpcom/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-mu-wpcom", - "version": "5.18.0", + "version": "5.19.0-alpha", "description": "Enhances your site with features powered by WordPress.com", "homepage": "https://github.com/Automattic/jetpack/tree/HEAD/projects/packages/jetpack-mu-wpcom/#readme", "bugs": { diff --git a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php index 365566e3d5de9..162f9b51be409 100644 --- a/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php +++ b/projects/packages/jetpack-mu-wpcom/src/class-jetpack-mu-wpcom.php @@ -13,7 +13,7 @@ * Jetpack_Mu_Wpcom main class. */ class Jetpack_Mu_Wpcom { - const PACKAGE_VERSION = '5.18.0'; + const PACKAGE_VERSION = '5.19.0-alpha'; const PKG_DIR = __DIR__ . '/../'; const BASE_DIR = __DIR__ . '/'; const BASE_FILE = __FILE__; @@ -45,6 +45,7 @@ public static function init() { // This feature runs only on simple sites. if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { add_action( 'plugins_loaded', array( __CLASS__, 'load_verbum_comments' ) ); + add_action( 'wp_loaded', array( __CLASS__, 'load_verbum_comments_admin' ) ); } // Unified navigation fix for changes in WordPress 6.2. @@ -229,6 +230,12 @@ private static function should_disable_comment_experience( $blog_id ) { $is_p2 = str_contains( get_stylesheet(), 'pub/p2' ) || function_exists( '\WPForTeams\is_wpforteams_site' ) && is_wpforteams_site( $blog_id ); $is_forums = str_contains( get_stylesheet(), 'a8c/supportforums' ); // Not in /forums. + $verbum_option_enabled = get_blog_option( $blog_id, 'enable_verbum_commenting', true ); + + if ( empty( $verbum_option_enabled ) ) { + return true; + } + // Don't load any comment experience in the Reader, GlotPress, wp-admin, or P2. return ( 1 === $blog_id || TRANSLATE_BLOG_ID === $blog_id || is_admin() || $is_p2 || $is_forums ); } @@ -255,6 +262,14 @@ public static function load_verbum_comments() { } } + /** + * Load Verbum Comments Settings. + */ + public static function load_verbum_comments_admin() { + require_once __DIR__ . '/features/verbum-comments/assets/class-verbum-admin.php'; + new \Automattic\Jetpack\Verbum_Admin(); + } + /** * Load WPCOM Command Palette. * diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/assets/class-verbum-admin.php b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/assets/class-verbum-admin.php new file mode 100644 index 0000000000000..fc977df8c5505 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/assets/class-verbum-admin.php @@ -0,0 +1,304 @@ +setup_globals(); + + add_action( 'admin_init', array( $this, 'add_settings' ) ); + } + + /** + * Set any global variables or class variables + */ + protected function setup_globals() { + // Default commenting experience + $this->default_verbum_commenting = true; + + // Default allow blocks in comments + $this->default_allow_blocks = true; + + // Default option values. + $this->default_greeting = __( 'Leave a comment', 'jetpack-mu-wpcom' ); + + // Default color scheme. + $this->default_color_scheme = 'transparent'; + + // Possible color schemes. + $this->color_schemes = array( + 'transparent' => __( 'Transparent', 'jetpack-mu-wpcom' ), + 'light' => __( 'Light', 'jetpack-mu-wpcom' ), + 'dark' => __( 'Dark', 'jetpack-mu-wpcom' ), + ); + } + + /** Settings ************************************************************* */ + + /** + * Add the Jetpack settings to WordPress's discussions page + */ + public function add_settings() { + + add_settings_field( + 'enable_verbum_commenting', + __( 'Verbum', 'jetpack-mu-wpcom' ), + array( $this, 'verbum_field' ), + 'discussion' + ); + + register_setting( + 'discussion', + 'enable_verbum_commenting', + array( $this, 'enable_verbum_commenting_sanitize' ) + ); + + add_settings_field( + 'enable_blocks_comments', + __( 'Allow Blocks', 'jetpack-mu-wpcom' ), + array( $this, 'allow_blocks_field' ), + 'discussion' + ); + + register_setting( + 'discussion', + 'enable_blocks_comments', + array( $this, 'allow_blocks_sanitize' ) + ); + + /** + * Clever Greeting + */ + add_settings_field( + 'highlander_comment_form_prompt', + __( 'Greeting Text', 'jetpack-mu-wpcom' ), + array( $this, 'comment_form_greeting_setting' ), + 'discussion' + ); + + register_setting( + 'discussion', + 'highlander_comment_form_prompt', + array( $this, 'comment_form_greeting_sanitize' ) + ); + + /** + * Color Scheme + */ + add_settings_field( + 'jetpack_comment_form_color_scheme', + __( 'Color Scheme', 'jetpack-mu-wpcom' ), + array( $this, 'comment_form_color_scheme_setting' ), + 'discussion' + ); + + register_setting( + 'discussion', + 'jetpack_comment_form_color_scheme', + array( $this, 'comment_form_color_scheme_sanitize' ) + ); + } + + /** + * Discussions setting section blurb + * + * @since 1.4 + */ + public function comment_form_settings_section() { + ?> + +

+ + + + + + default_verbum_commenting ); + } + + /** + * Is verbum commenting enabled? + * + * @return boolean + */ + public function are_blocks_enabled() { + return (bool) get_option( 'enable_blocks_comments', $this->default_allow_blocks ); + } + + /** + * Custom Comment Greeting Text + */ + public function comment_form_greeting_setting() { + + // The greeting. + $greeting = get_option( 'highlander_comment_form_prompt', $this->default_greeting ); + ?> + + +

+ + default_greeting === $val ) ) { + delete_option( 'highlander_comment_form_prompt' ); + return false; + } + + return wp_kses( $val, array() ); + } + + /** + * Comment Form Color Scheme Setting + */ + public function comment_form_color_scheme_setting() { + + // The color scheme. + $scheme = get_option( 'jetpack_comment_form_color_scheme', $this->default_color_scheme ); + ?> + +
+ + + color_schemes as $key => $label ) : ?> + + +
+ + + +
+ + color_schemes ) + || + $val === $this->default_color_scheme + ) { + delete_option( 'jetpack_comment_form_color_scheme' ); + return false; + } + + return $val; + } + + /** + * Sanitize the allow blocks in comments setting + * + * @param string $val The allow blocks in comments string. + * @return string + */ + public function allow_blocks_sanitize( $val ) { + return $val ? '1' : '0'; + } + + /** + * Sanitize the verbum commenting setting + * + * @param string $val The verbum commenting string. + * @return string + */ + public function enable_verbum_commenting_sanitize( $val ) { + return $val ? '1' : '0'; + } +} diff --git a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php index 4024595bd7f83..7530996db1cbc 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/verbum-comments/class-verbum-comments.php @@ -278,6 +278,8 @@ public function enqueue_assets() { * @param array $args - The default comment form arguments. */ public function comment_form_defaults( $args ) { + $title_reply = get_option( 'highlander_comment_form_prompt', __( 'Leave a comment', 'jetpack-mu-wpcom' ) ); + return array_merge( $args, array( @@ -286,7 +288,7 @@ public function comment_form_defaults( $args ) { 'logged_in_as' => '', 'comment_notes_before' => '', 'comment_notes_after' => '', - 'title_reply' => __( 'Leave a comment', 'jetpack-mu-wpcom' ), + 'title_reply' => $title_reply, /* translators: % is the original posters name */ 'title_reply_to' => __( 'Leave a reply to %s', 'jetpack-mu-wpcom' ), 'cancel_reply_link' => __( 'Cancel reply', 'jetpack-mu-wpcom' ), @@ -561,6 +563,11 @@ public function should_load_gutenberg_comments() { return false; } + // Blocks in comments have been disabled on a simple site + if ( empty( get_option( 'enable_blocks_comments', true ) ) ) { + return false; + } + $blog_id = $this->blog_id; $e2e_tests = function_exists( 'has_blog_sticker' ) && has_blog_sticker( 'a8c-e2e-test-blog', $blog_id ); $has_blocks_flag = function_exists( 'has_blog_sticker' ) && has_blog_sticker( 'verbum-block-comments', $blog_id ); diff --git a/projects/plugins/mu-wpcom-plugin/changelog/add-verbum-settings b/projects/plugins/mu-wpcom-plugin/changelog/add-verbum-settings new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/mu-wpcom-plugin/changelog/add-verbum-settings @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/mu-wpcom-plugin/composer.json b/projects/plugins/mu-wpcom-plugin/composer.json index cd20a4dfe60e1..d99de8c1093b0 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.json +++ b/projects/plugins/mu-wpcom-plugin/composer.json @@ -46,6 +46,6 @@ ] }, "config": { - "autoloader-suffix": "d9d132a783958a00a2c7cccff60ca42d_jetpack_mu_wpcom_pluginⓥ2_1_7" + "autoloader-suffix": "d9d132a783958a00a2c7cccff60ca42d_jetpack_mu_wpcom_pluginⓥ2_1_8_alpha" } } diff --git a/projects/plugins/mu-wpcom-plugin/composer.lock b/projects/plugins/mu-wpcom-plugin/composer.lock index 9c70bf349a4cb..de136f4887c65 100644 --- a/projects/plugins/mu-wpcom-plugin/composer.lock +++ b/projects/plugins/mu-wpcom-plugin/composer.lock @@ -129,7 +129,7 @@ "dist": { "type": "path", "url": "../../packages/jetpack-mu-wpcom", - "reference": "0b1e76858ad334fd42df45a93d2dcca1a9d69365" + "reference": "956c1a7858d6ea2915c551f6233a0c1e476edfca" }, "require": { "automattic/jetpack-assets": "@dev", @@ -152,7 +152,7 @@ }, "autotagger": true, "branch-alias": { - "dev-trunk": "5.18.x-dev" + "dev-trunk": "5.19.x-dev" }, "textdomain": "jetpack-mu-wpcom", "version-constants": { diff --git a/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php b/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php index 89f212dfeb1e3..48e4f401473d5 100644 --- a/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php +++ b/projects/plugins/mu-wpcom-plugin/mu-wpcom-plugin.php @@ -3,7 +3,7 @@ * * Plugin Name: WordPress.com Features * Description: Test plugin for the jetpack-mu-wpcom package - * Version: 2.1.7 + * Version: 2.1.8-alpha * Author: Automattic * License: GPLv2 or later * Text Domain: jetpack-mu-wpcom-plugin diff --git a/projects/plugins/mu-wpcom-plugin/package.json b/projects/plugins/mu-wpcom-plugin/package.json index 9e81138e0cf33..0c0433b4f181e 100644 --- a/projects/plugins/mu-wpcom-plugin/package.json +++ b/projects/plugins/mu-wpcom-plugin/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@automattic/jetpack-mu-wpcom-plugin", - "version": "2.1.7", + "version": "2.1.8-alpha", "description": "Test plugin for the jetpack-mu-wpcom package", "homepage": "https://jetpack.com", "bugs": { From 4c2b44162cb4b29a3bfc2fbed41992d72552d56b Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Thu, 21 Mar 2024 17:24:58 +0700 Subject: [PATCH 5/9] Untangle: Update links in Settings -> Traffic -> GA when admin interface is wp-admin (#36493) --- .../jetpack/_inc/client/state/site/reducer.js | 12 +++++++++++ .../_inc/client/traffic/google-analytics.jsx | 20 +++++++++++++++---- .../jetpack/_inc/client/traffic/index.jsx | 11 ++++------ .../changelog/untangle-google-analytics | 4 ++++ 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/untangle-google-analytics diff --git a/projects/plugins/jetpack/_inc/client/state/site/reducer.js b/projects/plugins/jetpack/_inc/client/state/site/reducer.js index 68aaf4180706a..c7fd41dba09d6 100644 --- a/projects/plugins/jetpack/_inc/client/state/site/reducer.js +++ b/projects/plugins/jetpack/_inc/client/state/site/reducer.js @@ -344,6 +344,18 @@ export function siteHasFeature( state, featureId ) { return siteFeatures && siteFeatures.indexOf( featureId ) >= 0; } +/** + * Check if the site's admin interface style is set to wp-admin. + * + * @param {object} state - Global state tree + * @returns {boolean} Whether the admin interface style is set to wp-admin. + */ +export function siteUsesWpAdminInterface( state ) { + return ( + get( state.jetpack.siteData, [ 'data', 'options', 'wpcom_admin_interface' ] ) === 'wp-admin' + ); +} + /** * Returns the purchase data for a site * diff --git a/projects/plugins/jetpack/_inc/client/traffic/google-analytics.jsx b/projects/plugins/jetpack/_inc/client/traffic/google-analytics.jsx index c398af5c39c7a..638ae4cc19ecf 100644 --- a/projects/plugins/jetpack/_inc/client/traffic/google-analytics.jsx +++ b/projects/plugins/jetpack/_inc/client/traffic/google-analytics.jsx @@ -42,9 +42,13 @@ export const GoogleAnalytics = withModuleSettingsFormHelpers( { a: ( ), } @@ -55,7 +59,15 @@ export const GoogleAnalytics = withModuleSettingsFormHelpers( compact className="jp-settings-card__configure-link" onClick={ this.trackConfigureClick } - href={ this.props.configureUrl } + href={ getRedirectUrl( + this.props.siteUsesWpAdminInterface + ? 'calypso-marketing-connections' + : 'calypso-marketing-traffic', + { + site: this.props.site, + anchor: 'analytics', + } + ) } target="_blank" > { __( 'Configure your Google Analytics settings', 'jetpack' ) } diff --git a/projects/plugins/jetpack/_inc/client/traffic/index.jsx b/projects/plugins/jetpack/_inc/client/traffic/index.jsx index d360e4fa4577f..8660a969c9932 100644 --- a/projects/plugins/jetpack/_inc/client/traffic/index.jsx +++ b/projects/plugins/jetpack/_inc/client/traffic/index.jsx @@ -13,6 +13,7 @@ import { getLastPostUrl, currentThemeIsBlockTheme, getSiteId } from 'state/initi import { getModule, getModuleOverride } from 'state/modules'; import { isModuleFound } from 'state/search'; import { getSettings } from 'state/settings'; +import { siteUsesWpAdminInterface } from 'state/site'; import Blaze from './blaze'; import { GoogleAnalytics } from './google-analytics'; import { RelatedPosts } from './related-posts'; @@ -38,6 +39,7 @@ export class Traffic extends React.Component { hasConnectedOwner: this.props.hasConnectedOwner, lastPostUrl: this.props.lastPostUrl, siteAdminUrl: this.props.siteAdminUrl, + siteUsesWpAdminInterface: this.props.siteUsesWpAdminInterface, }; const foundSeo = this.props.isModuleFound( 'seo-tools' ), @@ -90,13 +92,7 @@ export class Traffic extends React.Component { ) } { foundStats && } { foundAnalytics && ( - + ) } { foundBlaze && } { foundShortlinks && } @@ -120,5 +116,6 @@ export default connect( state => { getModuleOverride: module_name => getModuleOverride( state, module_name ), hasConnectedOwner: hasConnectedOwner( state ), blogID: getSiteId( state ), + siteUsesWpAdminInterface: siteUsesWpAdminInterface( state ), }; } )( Traffic ); diff --git a/projects/plugins/jetpack/changelog/untangle-google-analytics b/projects/plugins/jetpack/changelog/untangle-google-analytics new file mode 100644 index 0000000000000..fad19ae3aa352 --- /dev/null +++ b/projects/plugins/jetpack/changelog/untangle-google-analytics @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Use correct links in Settings -> Traffic -> GA when admin interface is wp-admin From b2e10c7013e1899d5169f0d3111afea65ebc3869 Mon Sep 17 00:00:00 2001 From: Ashar Fuadi Date: Thu, 21 Mar 2024 17:28:43 +0700 Subject: [PATCH 6/9] Untangle: update launchpad links for newsletter setting to go to Jetpack's (#36495) --- .../changelog/untangle-launchpad-newsletter | 4 ++++ .../src/features/launchpad/launchpad-task-definitions.php | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 projects/packages/jetpack-mu-wpcom/changelog/untangle-launchpad-newsletter diff --git a/projects/packages/jetpack-mu-wpcom/changelog/untangle-launchpad-newsletter b/projects/packages/jetpack-mu-wpcom/changelog/untangle-launchpad-newsletter new file mode 100644 index 0000000000000..b612f4cb870b6 --- /dev/null +++ b/projects/packages/jetpack-mu-wpcom/changelog/untangle-launchpad-newsletter @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Untangle: update launchpad links for newsletter setting to go to Jetpack's diff --git a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php index af2d3455783a5..b7a42abc465eb 100644 --- a/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php +++ b/projects/packages/jetpack-mu-wpcom/src/features/launchpad/launchpad-task-definitions.php @@ -456,6 +456,9 @@ function wpcom_launchpad_get_task_definitions() { }, 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', 'get_calypso_path' => function ( $task, $default, $data ) { + if ( wpcom_launchpad_should_use_wp_admin_link() ) { + return admin_url( 'admin.php?page=jetpack#/newsletter' ); + } return '/settings/newsletter/' . $data['site_slug_encoded']; }, ), @@ -465,6 +468,9 @@ function wpcom_launchpad_get_task_definitions() { }, 'is_complete_callback' => 'wpcom_launchpad_is_task_option_completed', 'get_calypso_path' => function ( $task, $default, $data ) { + if ( wpcom_launchpad_should_use_wp_admin_link() ) { + return admin_url( 'admin.php?page=jetpack#/newsletter' ); + } return '/settings/newsletter/' . $data['site_slug_encoded']; }, ), From 650361daa08c931649cfc7b80d8357e8532275ed Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Thu, 21 Mar 2024 13:46:39 +0200 Subject: [PATCH 7/9] Rename "Earn" block category to "Monetize" (#36480) * Blocks category: change from "Earn" to "Monetize" * Move "Paid content" block from "Grow" to "Monetize" --- .../changelog/update-block-category-earn-monetize | 4 ++++ .../jetpack/extensions/blocks/donations/block.json | 3 ++- .../jetpack/extensions/blocks/opentable/block.json | 2 +- .../extensions/blocks/payment-buttons/block.json | 3 ++- .../extensions/blocks/payments-intro/block.json | 4 ++-- .../jetpack/extensions/blocks/paywall/block.json | 4 +++- .../extensions/blocks/premium-content/block.json | 3 ++- .../extensions/blocks/recurring-payments/block.json | 3 ++- .../extensions/blocks/simple-payments/block.json | 3 ++- .../blocks/simple-payments/deprecated/v2/index.js | 2 +- .../plugins/jetpack/extensions/blocks/tock/block.json | 2 +- .../jetpack/extensions/blocks/wordads/block.json | 2 +- .../jetpack/extensions/shared/block-category.js | 10 +++++----- .../jetpack/extensions/shared/block-category.native.js | 8 ++++---- 14 files changed, 32 insertions(+), 21 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/update-block-category-earn-monetize diff --git a/projects/plugins/jetpack/changelog/update-block-category-earn-monetize b/projects/plugins/jetpack/changelog/update-block-category-earn-monetize new file mode 100644 index 0000000000000..4645c05525a39 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-block-category-earn-monetize @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Block category "Earn" renamed to "Monetize" diff --git a/projects/plugins/jetpack/extensions/blocks/donations/block.json b/projects/plugins/jetpack/extensions/blocks/donations/block.json index 3fd046e11e8ad..2128f3d6112bc 100644 --- a/projects/plugins/jetpack/extensions/blocks/donations/block.json +++ b/projects/plugins/jetpack/extensions/blocks/donations/block.json @@ -11,6 +11,7 @@ "debit card", "donate", "earn", + "monetize", "ecommerce", "fundraising", "fundraiser", @@ -31,7 +32,7 @@ ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "html": false }, "attributes": { diff --git a/projects/plugins/jetpack/extensions/blocks/opentable/block.json b/projects/plugins/jetpack/extensions/blocks/opentable/block.json index 391a8ec4e18fb..8a4f7255cbd78 100644 --- a/projects/plugins/jetpack/extensions/blocks/opentable/block.json +++ b/projects/plugins/jetpack/extensions/blocks/opentable/block.json @@ -7,7 +7,7 @@ "keywords": [ "booking", "reservation", "restaurant" ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "align": true, "html": false }, "attributes": { diff --git a/projects/plugins/jetpack/extensions/blocks/payment-buttons/block.json b/projects/plugins/jetpack/extensions/blocks/payment-buttons/block.json index ea6ffb338a137..d094c8474cec1 100644 --- a/projects/plugins/jetpack/extensions/blocks/payment-buttons/block.json +++ b/projects/plugins/jetpack/extensions/blocks/payment-buttons/block.json @@ -13,6 +13,7 @@ "donate", "Donations", "earn", + "monetize", "ecommerce", "gofundme", "memberships", @@ -36,7 +37,7 @@ ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "__experimentalExposeControlsToChildren": true, diff --git a/projects/plugins/jetpack/extensions/blocks/payments-intro/block.json b/projects/plugins/jetpack/extensions/blocks/payments-intro/block.json index 81613b5404518..38df0e99f9798 100644 --- a/projects/plugins/jetpack/extensions/blocks/payments-intro/block.json +++ b/projects/plugins/jetpack/extensions/blocks/payments-intro/block.json @@ -4,10 +4,10 @@ "name": "jetpack/payments-intro", "title": "Payments", "description": "Sell products and services or receive donations on your website.", - "keywords": [ "paid", "pay", "money", "checkout" ], + "keywords": [ "earn", "monetize", "paid", "pay", "money", "checkout" ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "alignWide": false, diff --git a/projects/plugins/jetpack/extensions/blocks/paywall/block.json b/projects/plugins/jetpack/extensions/blocks/paywall/block.json index e3151f82abe94..5b6d09c691a53 100644 --- a/projects/plugins/jetpack/extensions/blocks/paywall/block.json +++ b/projects/plugins/jetpack/extensions/blocks/paywall/block.json @@ -5,6 +5,8 @@ "title": "Paywall", "description": "Limit access to the content below this block to chosen subscribers.", "keywords": [ + "earn", + "monetize", "more", "email", "follow", @@ -18,7 +20,7 @@ ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "customClassName": false, diff --git a/projects/plugins/jetpack/extensions/blocks/premium-content/block.json b/projects/plugins/jetpack/extensions/blocks/premium-content/block.json index c3e949ca9179f..37272ac92e96e 100644 --- a/projects/plugins/jetpack/extensions/blocks/premium-content/block.json +++ b/projects/plugins/jetpack/extensions/blocks/premium-content/block.json @@ -8,6 +8,7 @@ "buy", "credit card", "debit card", + "monetize", "earn", "exclusive", "gated", @@ -38,7 +39,7 @@ ], "version": "12.5.0", "textdomain": "jetpack", - "category": "grow", + "category": "monetize", "icon": "", "supports": { "html": false diff --git a/projects/plugins/jetpack/extensions/blocks/recurring-payments/block.json b/projects/plugins/jetpack/extensions/blocks/recurring-payments/block.json index 6735a34f5b65a..78dd93ab67831 100644 --- a/projects/plugins/jetpack/extensions/blocks/recurring-payments/block.json +++ b/projects/plugins/jetpack/extensions/blocks/recurring-payments/block.json @@ -12,6 +12,7 @@ "debit card", "donate", "Donations", + "monetize", "earn", "ecommerce", "gofundme", @@ -36,7 +37,7 @@ ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "html": false, diff --git a/projects/plugins/jetpack/extensions/blocks/simple-payments/block.json b/projects/plugins/jetpack/extensions/blocks/simple-payments/block.json index 7e5658ab8ea4e..d13de747d1f97 100644 --- a/projects/plugins/jetpack/extensions/blocks/simple-payments/block.json +++ b/projects/plugins/jetpack/extensions/blocks/simple-payments/block.json @@ -9,6 +9,7 @@ "commerce", "credit card", "debit card", + "monetize", "earn", "ecommerce", "money", @@ -23,7 +24,7 @@ ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "className": false, diff --git a/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js b/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js index efd93cceff991..f46689147a2e3 100644 --- a/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js +++ b/projects/plugins/jetpack/extensions/blocks/simple-payments/deprecated/v2/index.js @@ -42,7 +42,7 @@ const settings = { foreground: getIconColor(), }, - category: 'earn', + category: 'monetize', keywords: [ _x( 'buy', 'block search term', 'jetpack' ), diff --git a/projects/plugins/jetpack/extensions/blocks/tock/block.json b/projects/plugins/jetpack/extensions/blocks/tock/block.json index 0a2e5189d54b8..f2960a3895fbb 100644 --- a/projects/plugins/jetpack/extensions/blocks/tock/block.json +++ b/projects/plugins/jetpack/extensions/blocks/tock/block.json @@ -7,7 +7,7 @@ "keywords": [ "booking", "reservation", "restaurant" ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "align": true, diff --git a/projects/plugins/jetpack/extensions/blocks/wordads/block.json b/projects/plugins/jetpack/extensions/blocks/wordads/block.json index 79dc65049fe4d..5a8533f7696e7 100644 --- a/projects/plugins/jetpack/extensions/blocks/wordads/block.json +++ b/projects/plugins/jetpack/extensions/blocks/wordads/block.json @@ -7,7 +7,7 @@ "keywords": [ "ads", "WordAds", "advertisement" ], "version": "12.5.0", "textdomain": "jetpack", - "category": "earn", + "category": "monetize", "icon": "", "supports": { "align": [ "left", "center", "right" ], diff --git a/projects/plugins/jetpack/extensions/shared/block-category.js b/projects/plugins/jetpack/extensions/shared/block-category.js index 321cc018dc188..bdd3e485a1eb4 100644 --- a/projects/plugins/jetpack/extensions/shared/block-category.js +++ b/projects/plugins/jetpack/extensions/shared/block-category.js @@ -14,7 +14,7 @@ if ( ! isWpcom ) { } // We're moving Form specific blocks to a new 'Forms' category -// that should appear before the 'earn' and 'grow' categories +// that should appear before the 'monetize' and 'grow' categories setCategories( [ ...getCategories().filter( ( { slug } ) => slug !== 'contact-form' ), { @@ -25,11 +25,11 @@ setCategories( [ ] ); setCategories( [ - ...getCategories().filter( ( { slug } ) => slug !== 'earn' ), - // Add a Earn block category + ...getCategories().filter( ( { slug } ) => slug !== 'monetize' ), + // Add a Monetize block category { - slug: 'earn', - title: __( 'Earn', 'jetpack' ), + slug: 'monetize', + title: __( 'Monetize', 'jetpack' ), icon: , }, ] ); diff --git a/projects/plugins/jetpack/extensions/shared/block-category.native.js b/projects/plugins/jetpack/extensions/shared/block-category.native.js index 98c340032fc5e..25feac4659cc7 100644 --- a/projects/plugins/jetpack/extensions/shared/block-category.native.js +++ b/projects/plugins/jetpack/extensions/shared/block-category.native.js @@ -12,11 +12,11 @@ if ( hostApp === 'WordPress' ) { } setCategories( [ - ...getCategories().filter( ( { slug } ) => slug !== 'earn' ), - // Add a Earn block category + ...getCategories().filter( ( { slug } ) => slug !== 'monetize' ), + // Add a Monetize block category { - slug: 'earn', - title: __( 'Earn', 'jetpack' ), + slug: 'monetize', + title: __( 'Monetize', 'jetpack' ), icon: , }, ] ); From a966fea5ad2466bf3c7b93d31f31c093bbf3b7f0 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Thu, 21 Mar 2024 08:06:06 -0400 Subject: [PATCH 8/9] autorelease, autotag: Tag and release non-alpha prereleases too (#36482) It has been a longstanding request to auto-tag and auto-release non-alpha prerelease versions, particularly betas. Let's make that happen. Note that even-numbered "-a.n" versions for Jetpack are considered alphas, while odd-numbered versions are not (they're what we release to Atomic). Right now Jetpack doesn't use the auto-tagger or auto-release, but I see that we've been manually tagging the odd-numbered 'a' versions in jetpack-production. --- .github/files/gh-autorelease/files/autorelease.sh | 8 +++++++- .github/files/gh-autorelease/workflows/autorelease.yml | 3 +++ .github/files/gh-autotagger/workflows/autotagger.yml | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/files/gh-autorelease/files/autorelease.sh b/.github/files/gh-autorelease/files/autorelease.sh index 694fe87fccd0d..276f65724db4d 100755 --- a/.github/files/gh-autorelease/files/autorelease.sh +++ b/.github/files/gh-autorelease/files/autorelease.sh @@ -9,11 +9,17 @@ set -eo pipefail : "${GITHUB_REPOSITORY:?Build argument needs to be set and non-empty.}" ## Determine tag -if [[ ! "$GITHUB_REF" =~ ^refs/tags/v?[0-9]+(\.[0-9]+)+$ ]]; then +if [[ ! "$GITHUB_REF" =~ ^refs/tags/v?[0-9]+(\.[0-9]+)+(-[a-z0-9._-]+)?$ ]]; then echo "::error::Expected GITHUB_REF like \`refs/tags/v1.2.3\` or \`refs/tags/1.2.3\`, got \`$GITHUB_REF\`" exit 1 fi TAG="${GITHUB_REF#refs/tags/}" + +## Check for alphas +if [[ "$TAG" =~ -(alpha|a\.[0-9]*[02468])$ ]]; then + echo "Not creating a release for alpha version $TAG" + exit 0 +fi echo "Creating release for $TAG" ## Determine slug and title format. diff --git a/.github/files/gh-autorelease/workflows/autorelease.yml b/.github/files/gh-autorelease/workflows/autorelease.yml index 5368bdf4c861f..7fb76b4f8ae94 100644 --- a/.github/files/gh-autorelease/workflows/autorelease.yml +++ b/.github/files/gh-autorelease/workflows/autorelease.yml @@ -4,8 +4,11 @@ on: push: tags: - 'v?[0-9]+.[0-9]+' + - 'v?[0-9]+.[0-9]+-*' - 'v?[0-9]+.[0-9]+.[0-9]+' + - 'v?[0-9]+.[0-9]+.[0-9]+-*' - 'v?[0-9]+.[0-9]+.[0-9]+.[0-9]+' + - 'v?[0-9]+.[0-9]+.[0-9]+.[0-9]+-*' jobs: publish: diff --git a/.github/files/gh-autotagger/workflows/autotagger.yml b/.github/files/gh-autotagger/workflows/autotagger.yml index a653d6e5676e8..a28f1e66a5e72 100644 --- a/.github/files/gh-autotagger/workflows/autotagger.yml +++ b/.github/files/gh-autotagger/workflows/autotagger.yml @@ -63,7 +63,7 @@ jobs: VER=$(sed -nEe 's/^## \[?([^]]*)\]? - .*/\1/;T;p;q' CHANGELOG.md || true) echo "Version from changelog is ${VER:-}" echo "version=$VER" >> "$GITHUB_OUTPUT" - if [[ "$VER" =~ ^[0-9]+(\.[0-9]+)+$ ]]; then + if [[ "$VER" =~ ^[0-9]+(\.[0-9]+)+(-[a-z0-9._-]+)?$ && ! "$VER" =~ -(alpha|a\.[0-9]*[02468])$ ]]; then echo "Version $VER ok to tag" echo "run=true" >> "$GITHUB_OUTPUT" else @@ -77,7 +77,7 @@ jobs: run: | RUN=true if [[ -e composer.json ]]; then - TMP=$(jq -r '.require // {} | to_entries[] | select( .value | test( "-(alpha|a.[0-9]+)$" ) ) | "\(.key) (\(.value))"' composer.json) + TMP=$(jq -r '.require // {} | to_entries[] | select( .value | test( "-(alpha|a\\.[0-9]*[02468])$" ) ) | "\(.key) (\(.value))"' composer.json) if [[ -n "$TMP" ]]; then echo "::notice::Not tagging due to -alpha deps on ${TMP//$'\n'/ }" RUN=false From a48c77a0a5f9c2a8271414127e2b14db19f55128 Mon Sep 17 00:00:00 2001 From: Jeremy Herve Date: Thu, 21 Mar 2024 13:15:44 +0100 Subject: [PATCH 9/9] a4a client plugin: initial infrastructure (#36353) * a4a client plugin: initial infrastructure * Fix naming * Update lock file * Add a basic test to make the linter happy * Update lock file again * Hide page from admin menu * Add Phan config files * Do not sync plugins See pfunGA-of-p2#comment-812 * Revert "Do not sync plugins" This reverts commit ff3304bfb0d4c5575527944ab6aa6362bf6bfd4f. See pfunGA-of-p2#comment-861 * Bump version * Fix Phan warning ``` OOPError PhanNoopNew Unused result of new object creation expression in new Automattic_For_Agencies_Client() (this may be called for the side effects of the non-empty constructor or destructor) ``` * Update class reference See https://github.com/Automattic/jetpack/pull/36353#discussion_r1530645190 * Bring back plugins_loaded hook See https://github.com/Automattic/jetpack/pull/36353#discussion_r1530714277 * Update phan config * changelog * Revert move to plugins_loaded It was causing issues with the deactivation process --- pnpm-lock.yaml | 91 + .../changelog/add-a4a-plugin-skeleton | 4 + .../connection/src/class-package-version.php | 2 +- .../.eslintrc.js | 17 + .../.gitattributes | 38 + .../automattic-for-agencies-client/.gitignore | 5 + .../.phan/baseline.php | 17 + .../.phan/config.php | 13 + .../.phpcs.dir.xml | 24 + .../.w.org-assets/README.md | 5 + .../CHANGELOG.md | 6 + .../automattic-for-agencies-client/README.md | 20 + .../automattic-for-agencies-client.php | 121 + .../babel.config.js | 10 + .../changelog/.gitkeep | 0 .../changelog/add-a4a-plugin-skeleton | 4 + .../changelog/add-a4a-plugin-skeleton#2 | 5 + .../composer.json | 75 + .../composer.lock | 4129 +++++++++++++++++ .../jest.config.js | 7 + .../jest.setup.js | 7 + .../package.json | 56 + .../phpunit.xml.dist | 14 + .../automattic-for-agencies-client/readme.txt | 35 + .../class-automattic-for-agencies-client.php | 157 + .../src/js/components/admin-page/index.jsx | 110 + .../components/admin-page/styles.module.scss | 35 + .../components/admin-page/test/index.test.js | 31 + .../src/js/index.js | 24 + .../tests/.phpcs.dir.xml | 4 + .../tests/e2e/.eslintrc.cjs | 6 + .../tests/e2e/.gitignore | 10 + .../tests/e2e/config/default.cjs | 1 + .../tests/e2e/package.json | 46 + .../tests/e2e/playwright.config.mjs | 1 + .../tests/e2e/specs/start.test.js | 18 + .../tests/php/bootstrap.php | 17 + ...t-class-automattic-for-agencies-client.php | 17 + .../webpack.config.js | 57 + 39 files changed, 5238 insertions(+), 1 deletion(-) create mode 100644 projects/packages/connection/changelog/add-a4a-plugin-skeleton create mode 100644 projects/plugins/automattic-for-agencies-client/.eslintrc.js create mode 100644 projects/plugins/automattic-for-agencies-client/.gitattributes create mode 100644 projects/plugins/automattic-for-agencies-client/.gitignore create mode 100644 projects/plugins/automattic-for-agencies-client/.phan/baseline.php create mode 100644 projects/plugins/automattic-for-agencies-client/.phan/config.php create mode 100644 projects/plugins/automattic-for-agencies-client/.phpcs.dir.xml create mode 100644 projects/plugins/automattic-for-agencies-client/.w.org-assets/README.md create mode 100644 projects/plugins/automattic-for-agencies-client/CHANGELOG.md create mode 100644 projects/plugins/automattic-for-agencies-client/README.md create mode 100644 projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php create mode 100644 projects/plugins/automattic-for-agencies-client/babel.config.js create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/.gitkeep create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton create mode 100644 projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton#2 create mode 100644 projects/plugins/automattic-for-agencies-client/composer.json create mode 100644 projects/plugins/automattic-for-agencies-client/composer.lock create mode 100644 projects/plugins/automattic-for-agencies-client/jest.config.js create mode 100644 projects/plugins/automattic-for-agencies-client/jest.setup.js create mode 100644 projects/plugins/automattic-for-agencies-client/package.json create mode 100644 projects/plugins/automattic-for-agencies-client/phpunit.xml.dist create mode 100644 projects/plugins/automattic-for-agencies-client/readme.txt create mode 100644 projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php create mode 100644 projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/index.jsx create mode 100644 projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/styles.module.scss create mode 100644 projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/test/index.test.js create mode 100644 projects/plugins/automattic-for-agencies-client/src/js/index.js create mode 100644 projects/plugins/automattic-for-agencies-client/tests/.phpcs.dir.xml create mode 100644 projects/plugins/automattic-for-agencies-client/tests/e2e/.eslintrc.cjs create mode 100644 projects/plugins/automattic-for-agencies-client/tests/e2e/.gitignore create mode 100644 projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs create mode 100644 projects/plugins/automattic-for-agencies-client/tests/e2e/package.json create mode 100644 projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs create mode 100644 projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js create mode 100644 projects/plugins/automattic-for-agencies-client/tests/php/bootstrap.php create mode 100644 projects/plugins/automattic-for-agencies-client/tests/php/test-class-automattic-for-agencies-client.php create mode 100644 projects/plugins/automattic-for-agencies-client/webpack.config.js diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a0a6853cd05a..ad2b67a3948e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2849,6 +2849,97 @@ importers: specifier: 4.9.1 version: 4.9.1(webpack@5.76.0) + projects/plugins/automattic-for-agencies-client: + dependencies: + '@automattic/jetpack-base-styles': + specifier: workspace:* + version: link:../../js-packages/base-styles + '@automattic/jetpack-components': + specifier: workspace:* + version: link:../../js-packages/components + '@automattic/jetpack-connection': + specifier: workspace:* + version: link:../../js-packages/connection + '@wordpress/data': + specifier: 9.23.0 + version: 9.23.0(react@18.2.0) + '@wordpress/date': + specifier: 4.53.0 + version: 4.53.0 + '@wordpress/element': + specifier: 5.30.0 + version: 5.30.0 + '@wordpress/i18n': + specifier: 4.53.0 + version: 4.53.0 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@automattic/jetpack-webpack-config': + specifier: workspace:* + version: link:../../js-packages/webpack-config + '@babel/core': + specifier: 7.24.0 + version: 7.24.0 + '@babel/preset-env': + specifier: 7.24.0 + version: 7.24.0(@babel/core@7.24.0) + '@babel/runtime': + specifier: 7.24.0 + version: 7.24.0 + '@testing-library/dom': + specifier: 9.3.4 + version: 9.3.4 + '@testing-library/react': + specifier: 14.2.1 + version: 14.2.1(react-dom@18.2.0)(react@18.2.0) + '@wordpress/browserslist-config': + specifier: 5.36.0 + version: 5.36.0 + babel-jest: + specifier: 29.4.3 + version: 29.4.3(@babel/core@7.24.0) + concurrently: + specifier: 7.6.0 + version: 7.6.0 + jest: + specifier: 29.7.0 + version: 29.7.0 + jest-environment-jsdom: + specifier: 29.7.0 + version: 29.7.0 + sass: + specifier: 1.64.1 + version: 1.64.1 + sass-loader: + specifier: 12.4.0 + version: 12.4.0(sass@1.64.1)(webpack@5.76.0) + webpack: + specifier: 5.76.0 + version: 5.76.0(webpack-cli@4.9.1) + webpack-cli: + specifier: 4.9.1 + version: 4.9.1(webpack@5.76.0) + + projects/plugins/automattic-for-agencies-client/tests/e2e: + devDependencies: + '@playwright/test': + specifier: 1.39.0 + version: 1.39.0 + allure-playwright: + specifier: 2.9.2 + version: 2.9.2 + config: + specifier: 3.3.7 + version: 3.3.7 + jetpack-e2e-commons: + specifier: workspace:* + version: link:../../../../../tools/e2e-commons + projects/plugins/boost: dependencies: '@automattic/format-currency': diff --git a/projects/packages/connection/changelog/add-a4a-plugin-skeleton b/projects/packages/connection/changelog/add-a4a-plugin-skeleton new file mode 100644 index 0000000000000..ac545b7b59239 --- /dev/null +++ b/projects/packages/connection/changelog/add-a4a-plugin-skeleton @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +yUpdate Phan config. diff --git a/projects/packages/connection/src/class-package-version.php b/projects/packages/connection/src/class-package-version.php index 932c07532057f..3a40946b92c0b 100644 --- a/projects/packages/connection/src/class-package-version.php +++ b/projects/packages/connection/src/class-package-version.php @@ -12,7 +12,7 @@ */ class Package_Version { - const PACKAGE_VERSION = '2.6.0'; + const PACKAGE_VERSION = '2.6.1-alpha'; const PACKAGE_SLUG = 'connection'; diff --git a/projects/plugins/automattic-for-agencies-client/.eslintrc.js b/projects/plugins/automattic-for-agencies-client/.eslintrc.js new file mode 100644 index 0000000000000..a557f3ef78c67 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + extends: [ require.resolve( 'jetpack-js-tools/eslintrc/react' ) ], + parserOptions: { + babelOptions: { + configFile: require.resolve( './babel.config.js' ), + }, + }, + rules: { + // Enforce the use of the automattic-for-agencies-client textdomain. + '@wordpress/i18n-text-domain': [ + 'error', + { + allowedTextDomain: 'automattic-for-agencies-client', + }, + ], + }, +}; diff --git a/projects/plugins/automattic-for-agencies-client/.gitattributes b/projects/plugins/automattic-for-agencies-client/.gitattributes new file mode 100644 index 0000000000000..65837475966ed --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/.gitattributes @@ -0,0 +1,38 @@ +# Files not needed to be distributed in the package. +.gitattributes export-ignore +.github/ export-ignore +package.json export-ignore + +# Files to include in the mirror repo, but excluded via gitignore +# Remember to end all directories with `/**` to properly tag every file. +# /src/js/example.min.js production-include +build/** production-include +jetpack_vendor/** production-include +vendor/autoload.php production-include +vendor/autoload_packages.php production-include +vendor/automattic/** production-include +vendor/composer/** production-include +vendor/jetpack-autoloader/** production-include + +# Files to exclude from the mirror repo, but included in the monorepo. +# Remember to end all directories with `/**` to properly tag every file. +.babelrc production-exclude +/.eslintrc.js production-exclude +.gitattributes production-exclude +.gitignore production-exclude +.phpcs.dir.xml production-exclude +babel.config.js production-exclude +build/**/*.js.map production-exclude +changelog/** production-exclude +composer.lock production-exclude +jest.config.js production-exclude +jest.setup.js production-exclude +package.json production-exclude +phpunit.xml.dist production-exclude +README.md production-exclude +src/js/** production-exclude +tests/** production-exclude +/vendor/automattic/jetpack-autoloader/** production-exclude +/vendor/automattic/jetpack-changelogger/** production-exclude +/vendor/automattic/jetpack-composer-plugin/** production-exclude +webpack.config.js production-exclude diff --git a/projects/plugins/automattic-for-agencies-client/.gitignore b/projects/plugins/automattic-for-agencies-client/.gitignore new file mode 100644 index 0000000000000..25fc4bc4eb33f --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/.gitignore @@ -0,0 +1,5 @@ +vendor/ +node_modules/ +wordpress +build/ +.cache/ diff --git a/projects/plugins/automattic-for-agencies-client/.phan/baseline.php b/projects/plugins/automattic-for-agencies-client/.phan/baseline.php new file mode 100644 index 0000000000000..3df50068147ad --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/.phan/baseline.php @@ -0,0 +1,17 @@ + [ + ], + // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. + // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) +]; diff --git a/projects/plugins/automattic-for-agencies-client/.phan/config.php b/projects/plugins/automattic-for-agencies-client/.phan/config.php new file mode 100644 index 0000000000000..635d4b0997c58 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/.phan/config.php @@ -0,0 +1,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/plugins/automattic-for-agencies-client/.w.org-assets/README.md b/projects/plugins/automattic-for-agencies-client/.w.org-assets/README.md new file mode 100644 index 0000000000000..dd74db8377fd3 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/.w.org-assets/README.md @@ -0,0 +1,5 @@ +# WordPress.org Assets + +This directory is intended to hold assets meant for w.org plugins SVN. + +There is no auto-deployment of these assets, so once you make changes, please ping the plugin's team or ask Crew to deploy them. diff --git a/projects/plugins/automattic-for-agencies-client/CHANGELOG.md b/projects/plugins/automattic-for-agencies-client/CHANGELOG.md new file mode 100644 index 0000000000000..03a962f457f66 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/CHANGELOG.md @@ -0,0 +1,6 @@ +# 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). diff --git a/projects/plugins/automattic-for-agencies-client/README.md b/projects/plugins/automattic-for-agencies-client/README.md new file mode 100644 index 0000000000000..2bcf7db064593 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/README.md @@ -0,0 +1,20 @@ +# Automattic For Agencies Client + +Automattic For Agencies Client plugin + +## How to install Automattic For Agencies Client + +### Installation From Git Repo + +## Contribute + +## Get Help + +## Security + +Need to report a security vulnerability? Go to [https://automattic.com/security/](https://automattic.com/security/) or directly to our security bug bounty site [https://hackerone.com/automattic](https://hackerone.com/automattic). + +## License + +Automattic For Agencies Client is licensed under [GNU General Public License v2 (or later)](./LICENSE.txt) + diff --git a/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php b/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php new file mode 100644 index 0000000000000..a248087b78a23 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/automattic-for-agencies-client.php @@ -0,0 +1,121 @@ + +
+

+ this document to set up your development environment. Automattic For Agencies Client must have Composer dependencies installed and built via the build command.', 'automattic-for-agencies-client' ), + array( + 'a' => array( + 'href' => array(), + 'target' => array(), + 'rel' => array(), + ), + ) + ), + 'https://github.com/Automattic/jetpack/blob/trunk/docs/development-environment.md#building-your-project' + ); + ?> +

+
+ ' . __( 'Settings', 'automattic-for-agencies-client' ) . ''; + array_unshift( $actions, $settings_link ); + + return $actions; + } +); + +// Redirect to plugin page when the plugin is activated. +add_action( 'activated_plugin', 'jetpack_starter_plugin_activation' ); + +/** + * Redirects to plugin page when the plugin is activated + * + * @param string $plugin Path to the plugin file relative to the plugins directory. + */ +function jetpack_starter_plugin_activation( $plugin ) { + if ( + AUTOMATTIC_FOR_AGENCIES_CLIENT_ROOT_FILE_RELATIVE_PATH === $plugin && + \Automattic\Jetpack\Plugins_Installer::is_current_request_activating_plugin_from_plugins_screen( AUTOMATTIC_FOR_AGENCIES_CLIENT_ROOT_FILE_RELATIVE_PATH ) + ) { + wp_safe_redirect( esc_url( admin_url( 'options-general.php?page=' . AUTOMATTIC_FOR_AGENCIES_CLIENT_SLUG ) ) ); + exit; + } +} + +register_deactivation_hook( __FILE__, array( 'Automattic_For_Agencies_Client', 'plugin_deactivation' ) ); + +// Initialize the plugin's main class. +Automattic_For_Agencies_Client::init(); diff --git a/projects/plugins/automattic-for-agencies-client/babel.config.js b/projects/plugins/automattic-for-agencies-client/babel.config.js new file mode 100644 index 0000000000000..d4d1ccd6e6284 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/babel.config.js @@ -0,0 +1,10 @@ +const config = { + presets: [ + [ + '@automattic/jetpack-webpack-config/babel/preset', + { pluginReplaceTextdomain: { textdomain: 'automattic-for-agencies-client' } }, + ], + ], +}; + +module.exports = config; diff --git a/projects/plugins/automattic-for-agencies-client/changelog/.gitkeep b/projects/plugins/automattic-for-agencies-client/changelog/.gitkeep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton b/projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton new file mode 100644 index 0000000000000..6d0d21d7e1833 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Initial commit for the plugin’s infrastructure. diff --git a/projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton#2 b/projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton#2 new file mode 100644 index 0000000000000..9aa70e3ec1f75 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/changelog/add-a4a-plugin-skeleton#2 @@ -0,0 +1,5 @@ +Significance: patch +Type: changed +Comment: Updated composer.lock. + + diff --git a/projects/plugins/automattic-for-agencies-client/composer.json b/projects/plugins/automattic-for-agencies-client/composer.json new file mode 100644 index 0000000000000..a94a2dfa180aa --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/composer.json @@ -0,0 +1,75 @@ +{ + "name": "automattic/automattic-for-agencies-client", + "description": "Easily connect your clients sites to the Automattic for Agencies portal and enable portal features like plugin updates, downtime monitoring, and more.", + "type": "wordpress-plugin", + "license": "GPL-2.0-or-later", + "require": { + "automattic/jetpack-assets": "@dev", + "automattic/jetpack-autoloader": "@dev", + "automattic/jetpack-composer-plugin": "@dev", + "automattic/jetpack-config": "@dev", + "automattic/jetpack-connection": "@dev", + "automattic/jetpack-identity-crisis": "@dev", + "automattic/jetpack-plugins-installer": "@dev", + "automattic/jetpack-sync": "@dev" + }, + "require-dev": { + "yoast/phpunit-polyfills": "1.1.0", + "automattic/jetpack-changelogger": "@dev", + "automattic/wordbless": "0.4.2", + "brain/monkey": "2.6.1" + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ], + "build-development": [ + "pnpm run build" + ], + "build-production": [ + "pnpm run build-production-concurrently" + ], + "watch": [ + "Composer\\Config::disableProcessTimeout", + "pnpm run watch" + ], + "post-install-cmd": "WorDBless\\Composer\\InstallDropin::copy", + "post-update-cmd": "WorDBless\\Composer\\InstallDropin::copy" + }, + "repositories": [ + { + "type": "path", + "url": "../../packages/*", + "options": { + "monorepo": true + } + } + ], + "minimum-stability": "dev", + "prefer-stable": true, + "extra": { + "mirror-repo": "Automattic/automattic-for-agencies-client", + "release-branch-prefix": "automattic-for-agencies-client", + "beta-plugin-slug": "automattic-for-agencies-client", + "wp-plugin-slug": "automattic-for-agencies-client", + "changelogger": { + "versioning": "semver" + } + }, + "config": { + "allow-plugins": { + "roots/wordpress-core-installer": true, + "automattic/jetpack-autoloader": true, + "automattic/jetpack-composer-plugin": true + }, + "autoloader-suffix": "c4802e05bbcf59fd3b6350e8d3e5482c_automattic_for_agencies_clientⓥ0_1_0_alpha" + } +} diff --git a/projects/plugins/automattic-for-agencies-client/composer.lock b/projects/plugins/automattic-for-agencies-client/composer.lock new file mode 100644 index 0000000000000..a2a91f33cfe4a --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/composer.lock @@ -0,0 +1,4129 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "84193362ebcb355342fa10fac4a2e0c1", + "packages": [ + { + "name": "automattic/jetpack-a8c-mc-stats", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/a8c-mc-stats", + "reference": "29e2de602fcb803984eed4229ffa60a2f96a53f9" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-a8c-mc-stats", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-a8c-mc-stats/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Used to record internal usage stats for Automattic. Not visible to site owners.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-admin-ui", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/admin-ui", + "reference": "b191c34a0e21f625069eab0c054d8827b9542dfa" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "automattic/jetpack-logo": "@dev", + "automattic/wordbless": "dev-master", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-admin-ui", + "textdomain": "jetpack-admin-ui", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-admin-ui/compare/${old}...${new}" + }, + "branch-alias": { + "dev-trunk": "0.4.x-dev" + }, + "version-constants": { + "::PACKAGE_VERSION": "src/class-admin-menu.php" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ], + "post-install-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "post-update-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Generic Jetpack wp-admin UI elements", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-assets", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/assets", + "reference": "d5648e0a4f0a8bffbbc805d0f6a5ed0f3cedd521" + }, + "require": { + "automattic/jetpack-constants": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "brain/monkey": "2.6.1", + "wikimedia/testing-access-wrapper": "^1.0 || ^2.0 || ^3.0", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-assets", + "textdomain": "jetpack-assets", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-assets/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.1.x-dev" + } + }, + "autoload": { + "files": [ + "actions.php" + ], + "classmap": [ + "src/" + ] + }, + "scripts": { + "build-development": [ + "pnpm run build" + ], + "build-production": [ + "pnpm run build-production" + ], + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-js": [ + "pnpm run test" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Asset management utilities for Jetpack ecosystem packages", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-autoloader", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/autoloader", + "reference": "6c9f1a7060500a7b1a498dc31f1f785c04cf7488" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2.0", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "type": "composer-plugin", + "extra": { + "autotagger": true, + "class": "Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin", + "mirror-repo": "Automattic/jetpack-autoloader", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-autoloader/compare/v${old}...v${new}" + }, + "version-constants": { + "::VERSION": "src/AutoloadGenerator.php" + }, + "branch-alias": { + "dev-trunk": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/AutoloadGenerator.php" + ], + "psr-4": { + "Automattic\\Jetpack\\Autoloader\\": "src" + } + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Creates a custom autoloader for a plugin or theme.", + "keywords": [ + "autoload", + "autoloader", + "composer", + "jetpack", + "plugin", + "wordpress" + ], + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-composer-plugin", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/composer-plugin", + "reference": "9dd2a092b3de5ed00ee778f1f40704f7d913a836" + }, + "require": { + "composer-plugin-api": "^2.1.0", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "composer/composer": "^2.2 || ^2.4", + "yoast/phpunit-polyfills": "1.1.0" + }, + "type": "composer-plugin", + "extra": { + "plugin-modifies-install-path": true, + "class": "Automattic\\Jetpack\\Composer\\Plugin", + "mirror-repo": "Automattic/jetpack-composer-plugin", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-composer-plugin/compare/v${old}...v${new}" + }, + "autotagger": true, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A custom installer plugin for Composer to move Jetpack packages out of `vendor/` so WordPress's translation infrastructure will find their strings.", + "keywords": [ + "composer", + "i18n", + "jetpack", + "plugin" + ], + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-config", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/config", + "reference": "4345015142174fc8ac87bf81bfe65c3ffb42c9ef" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-config", + "textdomain": "jetpack-config", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-config/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "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.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-connection", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/connection", + "reference": "aec3b0bf9b0af8d72989c3d4e531c0226a137ba3" + }, + "require": { + "automattic/jetpack-a8c-mc-stats": "@dev", + "automattic/jetpack-admin-ui": "@dev", + "automattic/jetpack-constants": "@dev", + "automattic/jetpack-redirect": "@dev", + "automattic/jetpack-roles": "@dev", + "automattic/jetpack-status": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "automattic/wordbless": "@dev", + "brain/monkey": "2.6.1", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-connection", + "textdomain": "jetpack-connection", + "version-constants": { + "::PACKAGE_VERSION": "src/class-package-version.php" + }, + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-connection/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.6.x-dev" + } + }, + "autoload": { + "classmap": [ + "legacy", + "src/", + "src/webhooks" + ] + }, + "scripts": { + "build-production": [ + "pnpm run build-production" + ], + "build-development": [ + "pnpm run build" + ], + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "post-install-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "post-update-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Everything needed to connect to the Jetpack infrastructure", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-constants", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/constants", + "reference": "3fd2bf1d1ba0bb374918e6b7dd670735ce554c2b" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "brain/monkey": "2.6.1", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-constants", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-constants/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A wrapper for defining constants in a more testable way.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-identity-crisis", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/identity-crisis", + "reference": "1c5efb2ac35576b6c28d27582b2f93e2926e9320" + }, + "require": { + "automattic/jetpack-assets": "@dev", + "automattic/jetpack-connection": "@dev", + "automattic/jetpack-constants": "@dev", + "automattic/jetpack-logo": "@dev", + "automattic/jetpack-status": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "automattic/wordbless": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-identity-crisis", + "textdomain": "jetpack-idc", + "version-constants": { + "::PACKAGE_VERSION": "src/class-identity-crisis.php" + }, + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-identity-crisis/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "0.17.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "build-development": [ + "pnpm run build" + ], + "build-production": [ + "NODE_ENV='production' pnpm run build" + ], + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ], + "post-install-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "post-update-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "watch": [ + "Composer\\Config::disableProcessTimeout", + "pnpm run watch" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Identity Crisis.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-ip", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/ip", + "reference": "b696350993b7f42257788add260e0efa7c9934f4" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "brain/monkey": "2.6.1", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-ip", + "changelogger": { + "link-template": "https://github.com/automattic/jetpack-ip/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "0.2.x-dev" + }, + "textdomain": "jetpack-ip", + "version-constants": { + "::PACKAGE_VERSION": "src/class-utils.php" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Utilities for working with IP addresses.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-logo", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/logo", + "reference": "e152a4c83d1f952442d40260c559c4880757b298" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-logo", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-logo/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "A logo for Jetpack", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-password-checker", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/password-checker", + "reference": "16182898ae3faae3eb6ca9e5d2c490fd0b844243" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "automattic/wordbless": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-password-checker", + "textdomain": "jetpack-password-checker", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-password-checker/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "0.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ], + "post-install-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "post-update-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Password Checker.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-plugins-installer", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/plugins-installer", + "reference": "bdfc2fdd83370ee884a2ba1456c3886585eac847" + }, + "require": { + "automattic/jetpack-a8c-mc-stats": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "branch-alias": { + "dev-trunk": "0.3.x-dev" + }, + "mirror-repo": "Automattic/jetpack-plugins-installer", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-plugins-installer/compare/v${old}...v${new}" + }, + "autotagger": true, + "textdomain": "jetpack-plugins-installer" + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Handle installation of plugins from WP.org", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-redirect", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/redirect", + "reference": "effd6fdea78e9c3cb1bebf479474b4a9262444a1" + }, + "require": { + "automattic/jetpack-status": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "brain/monkey": "2.6.1", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-redirect", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-redirect/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Utilities to build URLs to the jetpack.com/redirect/ service", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-roles", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/roles", + "reference": "0ac6d02e8ef2adb058f8f52e80a4924a33fa9b86" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "brain/monkey": "2.6.1", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-roles", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-roles/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Utilities, related with user roles and capabilities.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-status", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/status", + "reference": "462582ef61f3f6be46574acb34c8d7f59adcdae9" + }, + "require": { + "automattic/jetpack-constants": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "automattic/jetpack-ip": "@dev", + "brain/monkey": "2.6.1", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-status", + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-status/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Used to retrieve information about the current status of Jetpack and the site overall.", + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/jetpack-sync", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/sync", + "reference": "fef540b80efa9abea56562486e0ee296305cee66" + }, + "require": { + "automattic/jetpack-connection": "@dev", + "automattic/jetpack-constants": "@dev", + "automattic/jetpack-identity-crisis": "@dev", + "automattic/jetpack-ip": "@dev", + "automattic/jetpack-password-checker": "@dev", + "automattic/jetpack-roles": "@dev", + "automattic/jetpack-status": "@dev", + "php": ">=7.0" + }, + "require-dev": { + "automattic/jetpack-changelogger": "@dev", + "automattic/wordbless": "@dev", + "yoast/phpunit-polyfills": "1.1.0" + }, + "suggest": { + "automattic/jetpack-autoloader": "Allow for better interoperability with other plugins that use this package." + }, + "type": "jetpack-library", + "extra": { + "autotagger": true, + "mirror-repo": "Automattic/jetpack-sync", + "textdomain": "jetpack-sync", + "version-constants": { + "::PACKAGE_VERSION": "src/class-package-version.php" + }, + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-sync/compare/v${old}...v${new}" + }, + "branch-alias": { + "dev-trunk": "2.10.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ], + "post-install-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ], + "post-update-cmd": [ + "WorDBless\\Composer\\InstallDropin::copy" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Everything needed to allow syncing to the WP.com infrastructure.", + "transport-options": { + "relative": true + } + } + ], + "packages-dev": [ + { + "name": "antecedent/patchwork", + "version": "2.1.28", + "source": { + "type": "git", + "url": "https://github.com/antecedent/patchwork.git", + "reference": "6b30aff81ebadf0f2feb9268d3e08385cebcc08d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/6b30aff81ebadf0f2feb9268d3e08385cebcc08d", + "reference": "6b30aff81ebadf0f2feb9268d3e08385cebcc08d", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignas Rudaitis", + "email": "ignas.rudaitis@gmail.com" + } + ], + "description": "Method redefinition (monkey-patching) functionality for PHP.", + "homepage": "https://antecedent.github.io/patchwork/", + "keywords": [ + "aop", + "aspect", + "interception", + "monkeypatching", + "redefinition", + "runkit", + "testing" + ], + "support": { + "issues": "https://github.com/antecedent/patchwork/issues", + "source": "https://github.com/antecedent/patchwork/tree/2.1.28" + }, + "time": "2024-02-06T09:26:11+00:00" + }, + { + "name": "automattic/jetpack-changelogger", + "version": "dev-trunk", + "dist": { + "type": "path", + "url": "../../packages/changelogger", + "reference": "24b6e97347346c7c06f03a53d9c50c8b9d111d8b" + }, + "require": { + "php": ">=7.0", + "symfony/console": "^3.4 || ^4.4 || ^5.2 || ^6.0", + "symfony/process": "^3.4 || ^4.4 || ^5.2 || ^6.0" + }, + "require-dev": { + "wikimedia/testing-access-wrapper": "^1.0 || ^2.0 || ^3.0", + "yoast/phpunit-polyfills": "1.1.0" + }, + "bin": [ + "bin/changelogger" + ], + "type": "project", + "extra": { + "autotagger": true, + "branch-alias": { + "dev-trunk": "4.1.x-dev" + }, + "mirror-repo": "Automattic/jetpack-changelogger", + "version-constants": { + "::VERSION": "src/Application.php" + }, + "changelogger": { + "link-template": "https://github.com/Automattic/jetpack-changelogger/compare/${old}...${new}" + } + }, + "autoload": { + "psr-4": { + "Automattic\\Jetpack\\Changelogger\\": "src", + "Automattic\\Jetpack\\Changelog\\": "lib" + } + }, + "autoload-dev": { + "psr-4": { + "Automattic\\Jetpack\\Changelogger\\Tests\\": "tests/php/includes/src", + "Automattic\\Jetpack\\Changelog\\Tests\\": "tests/php/includes/lib" + } + }, + "scripts": { + "phpunit": [ + "./vendor/phpunit/phpunit/phpunit --colors=always" + ], + "test-php": [ + "@composer phpunit" + ], + "post-install-cmd": [ + "[ -e vendor/bin/changelogger ] || { cd vendor/bin && ln -s ../../bin/changelogger; }" + ], + "post-update-cmd": [ + "[ -e vendor/bin/changelogger ] || { cd vendor/bin && ln -s ../../bin/changelogger; }" + ] + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "Jetpack Changelogger tool. Allows for managing changelogs by dropping change files into a changelog directory with each PR.", + "keywords": [ + "changelog", + "cli", + "dev", + "keepachangelog" + ], + "transport-options": { + "relative": true + } + }, + { + "name": "automattic/wordbless", + "version": "0.4.2", + "source": { + "type": "git", + "url": "https://github.com/Automattic/wordbless.git", + "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Automattic/wordbless/zipball/a1fe6376b81e6d037190aa1a5dc684d51eb674cd", + "reference": "a1fe6376b81e6d037190aa1a5dc684d51eb674cd", + "shasum": "" + }, + "require": { + "php": ">=5.6.20", + "roots/wordpress": "^6.0.2", + "yoast/phpunit-polyfills": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^9.5" + }, + "type": "wordpress-dropin", + "autoload": { + "psr-4": { + "WorDBless\\": "src/", + "WorDBless\\Composer\\": "src/Composer/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Automattic Inc." + } + ], + "description": "WorDBless allows you to use WordPress core functions in your PHPUnit tests without having to set up a database and the whole WordPress environment", + "support": { + "issues": "https://github.com/Automattic/wordbless/issues", + "source": "https://github.com/Automattic/wordbless/tree/0.4.2" + }, + "time": "2023-03-15T12:16:20+00:00" + }, + { + "name": "brain/monkey", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/Brain-WP/BrainMonkey.git", + "reference": "a31c84515bb0d49be9310f52ef1733980ea8ffbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/a31c84515bb0d49be9310f52ef1733980ea8ffbb", + "reference": "a31c84515bb0d49be9310f52ef1733980ea8ffbb", + "shasum": "" + }, + "require": { + "antecedent/patchwork": "^2.1.17", + "mockery/mockery": "^1.3.5 || ^1.4.4", + "php": ">=5.6.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "phpcompatibility/php-compatibility": "^9.3.0", + "phpunit/phpunit": "^5.7.26 || ^6.0 || ^7.0 || >=8.0 <8.5.12 || ^8.5.14 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-version/1": "1.x-dev", + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "inc/api.php" + ], + "psr-4": { + "Brain\\Monkey\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Giuseppe Mazzapica", + "email": "giuseppe.mazzapica@gmail.com", + "homepage": "https://gmazzap.me", + "role": "Developer" + } + ], + "description": "Mocking utility for PHP functions and WordPress plugin API", + "keywords": [ + "Monkey Patching", + "interception", + "mock", + "mock functions", + "mockery", + "patchwork", + "redefinition", + "runkit", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/Brain-WP/BrainMonkey/issues", + "source": "https://github.com/Brain-WP/BrainMonkey" + }, + "time": "2021-11-11T15:53:55+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.9", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.10", + "symplify/easy-coding-standard": "^12.0.8" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2023-12-10T02:24:34+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.0.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + }, + "time": "2024-03-05T20:51:40+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.31", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:37:42+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.17", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd", + "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.17" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-02-23T13:14:51+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "roots/wordpress", + "version": "6.4.3", + "source": { + "type": "git", + "url": "https://github.com/roots/wordpress.git", + "reference": "41ff6e23ccbc3a1691406d69fe8c211a225514e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/roots/wordpress/zipball/41ff6e23ccbc3a1691406d69fe8c211a225514e2", + "reference": "41ff6e23ccbc3a1691406d69fe8c211a225514e2", + "shasum": "" + }, + "require": { + "roots/wordpress-core-installer": "^1.0.0", + "roots/wordpress-no-content": "self.version" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT", + "GPL-2.0-or-later" + ], + "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", + "homepage": "https://wordpress.org/", + "keywords": [ + "blog", + "cms", + "wordpress" + ], + "support": { + "issues": "https://github.com/roots/wordpress/issues", + "source": "https://github.com/roots/wordpress/tree/6.4.3" + }, + "funding": [ + { + "url": "https://github.com/roots", + "type": "github" + } + ], + "time": "2022-06-01T16:54:37+00:00" + }, + { + "name": "roots/wordpress-core-installer", + "version": "1.100.0", + "source": { + "type": "git", + "url": "https://github.com/roots/wordpress-core-installer.git", + "reference": "73f8488e5178c5d54234b919f823a9095e2b1847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/roots/wordpress-core-installer/zipball/73f8488e5178c5d54234b919f823a9095e2b1847", + "reference": "73f8488e5178c5d54234b919f823a9095e2b1847", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.6.0" + }, + "conflict": { + "composer/installers": "<1.0.6" + }, + "replace": { + "johnpbloch/wordpress-core-installer": "*" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0", + "phpunit/phpunit": ">=5.7.27" + }, + "type": "composer-plugin", + "extra": { + "class": "Roots\\Composer\\WordPressCorePlugin" + }, + "autoload": { + "psr-4": { + "Roots\\Composer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "John P. Bloch", + "email": "me@johnpbloch.com" + }, + { + "name": "Roots", + "email": "team@roots.io" + } + ], + "description": "A custom installer to handle deploying WordPress with composer", + "keywords": [ + "wordpress" + ], + "support": { + "issues": "https://github.com/roots/wordpress-core-installer/issues", + "source": "https://github.com/roots/wordpress-core-installer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/roots", + "type": "github" + }, + { + "url": "https://www.patreon.com/rootsdev", + "type": "patreon" + } + ], + "time": "2020-08-20T00:27:30+00:00" + }, + { + "name": "roots/wordpress-no-content", + "version": "6.4.3", + "source": { + "type": "git", + "url": "https://github.com/WordPress/WordPress.git", + "reference": "6.4.3" + }, + "dist": { + "type": "zip", + "url": "https://downloads.wordpress.org/release/wordpress-6.4.3-no-content.zip", + "shasum": "4138c6337bf524159b406d5b27916deebb0f78df" + }, + "require": { + "php": ">= 7.0.0" + }, + "provide": { + "wordpress/core-implementation": "6.4.3" + }, + "suggest": { + "ext-curl": "Performs remote request operations.", + "ext-dom": "Used to validate Text Widget content and to automatically configuring IIS7+.", + "ext-exif": "Works with metadata stored in images.", + "ext-fileinfo": "Used to detect mimetype of file uploads.", + "ext-hash": "Used for hashing, including passwords and update packages.", + "ext-imagick": "Provides better image quality for media uploads.", + "ext-json": "Used for communications with other servers.", + "ext-libsodium": "Validates Signatures and provides securely random bytes.", + "ext-mbstring": "Used to properly handle UTF8 text.", + "ext-mysqli": "Connects to MySQL for database interactions.", + "ext-openssl": "Permits SSL-based connections to other hosts.", + "ext-pcre": "Increases performance of pattern matching in code searches.", + "ext-xml": "Used for XML parsing, such as from a third-party site.", + "ext-zip": "Used for decompressing Plugins, Themes, and WordPress update packages." + }, + "type": "wordpress-core", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "WordPress Community", + "homepage": "https://wordpress.org/about/" + } + ], + "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", + "homepage": "https://wordpress.org/", + "keywords": [ + "blog", + "cms", + "wordpress" + ], + "support": { + "docs": "https://developer.wordpress.org/", + "forum": "https://wordpress.org/support/", + "irc": "irc://irc.freenode.net/wordpress", + "issues": "https://core.trac.wordpress.org/", + "rss": "https://wordpress.org/news/feed/", + "source": "https://core.trac.wordpress.org/browser", + "wiki": "https://codex.wordpress.org/" + }, + "funding": [ + { + "url": "https://wordpressfoundation.org/donate/", + "type": "other" + } + ], + "time": "2024-01-30T19:32:01+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "symfony/console", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-22T20:27:10+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "710e27879e9be3395de2b98da3f52a946039f297" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-20T12:31:00+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-12-26T14:02:43+00:00" + }, + { + "name": "symfony/string", + "version": "v7.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.0.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-01T13:17:36+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "yoast/phpunit-polyfills", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/224e4a1329c03d8bad520e3fc4ec980034a4b212", + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "require-dev": { + "yoast/yoastcs": "^2.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "files": [ + "phpunitpolyfills-autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Team Yoast", + "email": "support@yoast.com", + "homepage": "https://yoast.com" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors" + } + ], + "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests", + "homepage": "https://github.com/Yoast/PHPUnit-Polyfills", + "keywords": [ + "phpunit", + "polyfill", + "testing" + ], + "support": { + "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", + "source": "https://github.com/Yoast/PHPUnit-Polyfills" + }, + "time": "2023-08-19T14:25:08+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "automattic/jetpack-assets": 20, + "automattic/jetpack-autoloader": 20, + "automattic/jetpack-composer-plugin": 20, + "automattic/jetpack-config": 20, + "automattic/jetpack-connection": 20, + "automattic/jetpack-identity-crisis": 20, + "automattic/jetpack-plugins-installer": 20, + "automattic/jetpack-sync": 20, + "automattic/jetpack-changelogger": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/projects/plugins/automattic-for-agencies-client/jest.config.js b/projects/plugins/automattic-for-agencies-client/jest.config.js new file mode 100644 index 0000000000000..83f3d4a448a17 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/jest.config.js @@ -0,0 +1,7 @@ +const baseConfig = require( 'jetpack-js-tools/jest/config.base.js' ); + +module.exports = { + ...baseConfig, + roots: [ '/src' ], + setupFilesAfterEnv: [ ...baseConfig.setupFilesAfterEnv, '/jest.setup.js' ], +}; diff --git a/projects/plugins/automattic-for-agencies-client/jest.setup.js b/projects/plugins/automattic-for-agencies-client/jest.setup.js new file mode 100644 index 0000000000000..8a95837f69de4 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/jest.setup.js @@ -0,0 +1,7 @@ +window.JP_CONNECTION_INITIAL_STATE = { + userConnectionData: { + currentUser: { + wpcomUser: { Id: 99999, login: 'bobsacramento', display_name: 'Bob Sacrmaneto' }, + }, + }, +}; diff --git a/projects/plugins/automattic-for-agencies-client/package.json b/projects/plugins/automattic-for-agencies-client/package.json new file mode 100644 index 0000000000000..9a1313c764f69 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/package.json @@ -0,0 +1,56 @@ +{ + "private": true, + "description": "Easily connect your clients sites to the Automattic for Agencies portal and enable portal features like plugin updates, downtime monitoring, and more..", + "homepage": "https://jetpack.com", + "bugs": { + "url": "https://github.com/Automattic/jetpack/labels/[Plugin] Automattic For Agencies Client" + }, + "repository": { + "type": "git", + "url": "https://github.com/Automattic/jetpack.git", + "directory": "projects/plugins/automattic-for-agencies-client" + }, + "license": "GPL-2.0-or-later", + "author": "Automattic", + "scripts": { + "build": "pnpm run clean && pnpm run build-client", + "build-client": "webpack", + "build-concurrently": "pnpm run clean && concurrently 'pnpm:build-client'", + "build-production-concurrently": "pnpm run clean && concurrently 'NODE_ENV=production BABEL_ENV=production pnpm run build-client' && pnpm run validate", + "clean": "rm -rf build/", + "test": "jest", + "validate": "pnpm exec validate-es build/", + "watch": "pnpm run build && webpack watch" + }, + "browserslist": [ + "extends @wordpress/browserslist-config" + ], + "dependencies": { + "@automattic/jetpack-base-styles": "workspace:*", + "@automattic/jetpack-components": "workspace:*", + "@automattic/jetpack-connection": "workspace:*", + "@wordpress/data": "9.23.0", + "@wordpress/date": "4.53.0", + "@wordpress/element": "5.30.0", + "@wordpress/i18n": "4.53.0", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@automattic/jetpack-webpack-config": "workspace:*", + "@babel/core": "7.24.0", + "@babel/preset-env": "7.24.0", + "@babel/runtime": "7.24.0", + "@testing-library/dom": "9.3.4", + "@testing-library/react": "14.2.1", + "@wordpress/browserslist-config": "5.36.0", + "babel-jest": "29.4.3", + "concurrently": "7.6.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "sass": "1.64.1", + "sass-loader": "12.4.0", + "webpack": "5.76.0", + "webpack-cli": "4.9.1" + } +} diff --git a/projects/plugins/automattic-for-agencies-client/phpunit.xml.dist b/projects/plugins/automattic-for-agencies-client/phpunit.xml.dist new file mode 100644 index 0000000000000..3223c32458db2 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/phpunit.xml.dist @@ -0,0 +1,14 @@ + + + + tests/php + + + + + + + src + + + diff --git a/projects/plugins/automattic-for-agencies-client/readme.txt b/projects/plugins/automattic-for-agencies-client/readme.txt new file mode 100644 index 0000000000000..691b9a81631bc --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/readme.txt @@ -0,0 +1,35 @@ +=== Automattic For Agencies Client === +Contributors: automattic, +Tags: stuff +Requires at least: 6.3 +Requires PHP: 7.0 +Tested up to: 6.5 +Stable tag: 0.1.0-alpha +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Automattic For Agencies Client plugin + +== Description == + +Easily connect your clients sites to the Automattic for Agencies portal and enable portal features like plugin updates, downtime monitoring, and more. + +== Installation == + +Installation instructions go here. + +== Frequently Asked Questions == + += A question that someone might have = + +An answer to that question. + +== Screenshots == + +1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from +the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets +directory take precedence. For example, `/assets/screenshot-1.png` would win over `/tags/4.3/screenshot-1.png` +(or jpg, jpeg, gif). +2. This is the second screen shot + +== Changelog == diff --git a/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php b/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php new file mode 100644 index 0000000000000..ca2c41cbb508c --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/src/class-automattic-for-agencies-client.php @@ -0,0 +1,157 @@ +ensure( + 'connection', + array( + 'slug' => AUTOMATTIC_FOR_AGENCIES_CLIENT_SLUG, + 'name' => AUTOMATTIC_FOR_AGENCIES_CLIENT_NAME, + 'url_info' => AUTOMATTIC_FOR_AGENCIES_CLIENT_URI, + ) + ); + // Sync package. + $must_sync_data = Data_Settings::MUST_SYNC_DATA_SETTINGS; + // Add additional modules. + $must_sync_data['jetpack_sync_modules'][] = 'Automattic\\Jetpack\\Sync\\Modules\\Plugins'; + $must_sync_data['jetpack_sync_modules'][] = 'Automattic\\Jetpack\\Sync\\Modules\\Users'; + $must_sync_data['jetpack_sync_modules'][] = 'Automattic\\Jetpack\\Sync\\Modules\\Meta'; + $must_sync_data['jetpack_sync_modules'][] = 'Automattic\\Jetpack\\Sync\\Modules\\Stats'; + $config->ensure( 'sync', $must_sync_data ); + + // Identity crisis package. + $config->ensure( 'identity_crisis' ); + } + + /** + * Add submenu. + * + * @since $$next-version$$ + * + * @return void + */ + public static function add_submenu() { + add_submenu_page( + '', + AUTOMATTIC_FOR_AGENCIES_CLIENT_NAME, + __( 'Automattic for Agencies', 'automattic-for-agencies-client' ), + 'manage_options', + AUTOMATTIC_FOR_AGENCIES_CLIENT_SLUG, + array( static::class, 'plugin_settings_page' ) + ); + } + + /** + * Set up Admin Settings screen. + */ + public static function load_scripts_styles() { + add_action( 'admin_enqueue_scripts', array( static::class, 'enqueue_admin_scripts' ) ); + } + + /** + * Enqueue plugin admin scripts and styles. + */ + public static function enqueue_admin_scripts() { + Assets::register_script( + 'automattic-for-agencies-client', + 'build/index.js', + AUTOMATTIC_FOR_AGENCIES_CLIENT_ROOT_FILE, + array( + 'in_footer' => true, + 'textdomain' => 'automattic-for-agencies-client', + ) + ); + Assets::enqueue_script( 'automattic-for-agencies-client' ); + // Initial JS state including JP Connection data. + Connection_Initial_State::render_script( 'automattic-for-agencies-client' ); + wp_add_inline_script( 'automattic-for-agencies-client', static::render_initial_state(), 'before' ); + } + + /** + * Render the initial state into a JavaScript variable. + * + * @return string + */ + private static function render_initial_state() { + return 'var automatticForAgenciesClientInitialState=JSON.parse(decodeURIComponent("' . rawurlencode( wp_json_encode( static::initial_state() ) ) . '"));'; + } + + /** + * Get the initial state data for hydrating the React UI. + * + * @return array + */ + private static function initial_state() { + return array( + 'apiRoot' => esc_url_raw( rest_url() ), + 'apiNonce' => wp_create_nonce( 'wp_rest' ), + 'registrationNonce' => wp_create_nonce( 'jetpack-registration-nonce' ), + ); + } + + /** + * Main plugin settings page. + */ + public static function plugin_settings_page() { + ?> +
+ remove_connection(); + } +} diff --git a/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/index.jsx b/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/index.jsx new file mode 100644 index 0000000000000..e3214b92bc1c3 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/index.jsx @@ -0,0 +1,110 @@ +import { + AdminPage, + AdminSectionHero, + Container, + Col, + PricingCard, +} from '@automattic/jetpack-components'; +import { ConnectScreenRequiredPlan, CONNECTION_STORE_ID } from '@automattic/jetpack-connection'; +import { useSelect } from '@wordpress/data'; +import { __ } from '@wordpress/i18n'; +import React from 'react'; +import styles from './styles.module.scss'; + +const Admin = () => { + const connectionStatus = useSelect( + select => select( CONNECTION_STORE_ID ).getConnectionStatus(), + [] + ); + const { isUserConnected, isRegistered } = connectionStatus; + const showConnectionCard = ! isRegistered || ! isUserConnected; + return ( + + + { showConnectionCard ? ( + + + + + + ) : ( + + +
+ + +

+ { __( 'The plugin headline.', 'automattic-for-agencies-client' ) } +

+
    +
  • + { __( + 'All the amazing things this plugin does', + 'automattic-for-agencies-client' + ) } +
  • +
  • + { __( + 'Presented in a list of amazing features', + 'automattic-for-agencies-client' + ) } +
  • +
  • + { __( 'And all the benefits you will get', 'automattic-for-agencies-client' ) } +
  • +
+ + + + + + + ) } + + + ); +}; + +export default Admin; + +const ConnectionSection = () => { + const { apiNonce, apiRoot, registrationNonce } = window.automatticForAgenciesClientInitialState; + return ( + +

{ __( 'Connection screen title', 'automattic-for-agencies-client' ) }

+
    +
  • { __( 'Amazing feature 1', 'automattic-for-agencies-client' ) }
  • +
  • { __( 'Amazing feature 2', 'automattic-for-agencies-client' ) }
  • +
  • { __( 'Amazing feature 3', 'automattic-for-agencies-client' ) }
  • +
+
+ ); +}; diff --git a/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/styles.module.scss b/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/styles.module.scss new file mode 100644 index 0000000000000..ed2e5598945f3 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/styles.module.scss @@ -0,0 +1,35 @@ +@import '@automattic/jetpack-base-styles/style'; + +:global { + #wpbody-content { + & > .notice { + display: none; + } + } + + .automattic-for-agencies-client-jitm-card { + .jitm-card { + margin-right: 0; + } + } +} + +.heading { + font-size: 36px; + line-height: 40px; + font-weight: 700; + margin: 0; +} + +ul.jp-product-promote { + li { + background: url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAANlBMVEVHcEwFnwUInggGnggGnggHnAcAnwUFnQcAnwcGnwkFnQgGnQgFnwcGnQYFnQcFnAcGnQkDnwdhiL0pAAAAEnRSTlMAMF//f2Aw7yBQ3+9gcIBgcED+HDbkAAAAZklEQVR4Ae3LNwICARDDQC0+cv7/Y8mwV9odSfWIcf/+VegnGkIvDaGXKvTTn/Gz+Uf5xTL0K1XotS7fs5H6GHvvaO8d7c3j7rdgHne/A/PYt/cO+R42oYdN6OEQetiFHo4A//6dAXqtBEkmtWutAAAAAElFTkSuQmCC ) + no-repeat; + background-size: 24px; + padding-left: 30px; + margin-bottom: 9px; + color: var( --jp-black ); + font-size: 16px; + line-height: 1.5; + } +} diff --git a/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/test/index.test.js b/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/test/index.test.js new file mode 100644 index 0000000000000..97f878b50704a --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/src/js/components/admin-page/test/index.test.js @@ -0,0 +1,31 @@ +import { CONNECTION_STORE_ID } from '@automattic/jetpack-connection'; +import { render, renderHook, screen } from '@testing-library/react'; +import { useSelect } from '@wordpress/data'; +import React from 'react'; +import Admin from '../index'; + +describe( 'Admin', () => { + beforeAll( () => { + window.automatticForAgenciesClientInitialState = { + apiNonce: '', + apiRoot: '', + registrationNonce: '', + }; + } ); + + test( 'Renders the component', () => { + let storeSelect; + + renderHook( () => useSelect( select => ( storeSelect = select( CONNECTION_STORE_ID ) ) ) ); + jest + .spyOn( storeSelect, 'getConnectionStatus' ) + .mockReset() + .mockReturnValue( { isRegistered: false, isUserConnected: false } ); + + render( ); + expect( screen.getByLabelText( 'Automattic For Agencies Client' ) ).toBeInTheDocument(); + expect( + screen.getByRole( 'heading', { name: 'Connection screen title' } ) + ).toBeInTheDocument(); + } ); +} ); diff --git a/projects/plugins/automattic-for-agencies-client/src/js/index.js b/projects/plugins/automattic-for-agencies-client/src/js/index.js new file mode 100644 index 0000000000000..12226cf9e82e2 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/src/js/index.js @@ -0,0 +1,24 @@ +import { ThemeProvider } from '@automattic/jetpack-components'; +import * as WPElement from '@wordpress/element'; +import React from 'react'; +import AdminPage from './components/admin-page'; + +/** + * Initial render function. + */ +function renderApp() { + const container = document.getElementById( 'automattic-for-agencies-client-root' ); + + if ( null === container ) { + return; + } + + const component = ( + + + + ); + WPElement.createRoot( container ).render( component ); +} + +renderApp(); diff --git a/projects/plugins/automattic-for-agencies-client/tests/.phpcs.dir.xml b/projects/plugins/automattic-for-agencies-client/tests/.phpcs.dir.xml new file mode 100644 index 0000000000000..46951fe77b37e --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/.phpcs.dir.xml @@ -0,0 +1,4 @@ + + + + diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/.eslintrc.cjs b/projects/plugins/automattic-for-agencies-client/tests/e2e/.eslintrc.cjs new file mode 100644 index 0000000000000..9d443c13e1b1a --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/.eslintrc.cjs @@ -0,0 +1,6 @@ +const loadIgnorePatterns = require( 'jetpack-js-tools/load-eslint-ignore.js' ); + +module.exports = { + extends: [ require.resolve( 'jetpack-e2e-commons/.eslintrc.cjs' ) ], + ignorePatterns: loadIgnorePatterns( __dirname ), +}; diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/.gitignore b/projects/plugins/automattic-for-agencies-client/tests/e2e/.gitignore new file mode 100644 index 0000000000000..73c4f4cd7a529 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/.gitignore @@ -0,0 +1,10 @@ +/node_modules +/config/local* +/config/tmp/* +/output +plan-data.txt +e2e_tunnels.txt +jetpack-private-options.txt +/allure-results +storage.json +/tmp diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs b/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs new file mode 100644 index 0000000000000..179bdfe0e8c9a --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/config/default.cjs @@ -0,0 +1 @@ +module.exports = require( 'jetpack-e2e-commons/config/default.cjs' ); diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json b/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json new file mode 100644 index 0000000000000..e1235c8d4a40e --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/package.json @@ -0,0 +1,46 @@ +{ + "name": "jetpack-starter-e2e-tests", + "private": true, + "type": "module", + "description": "Easily connect your clients sites to the Automattic for Agencies portal and enable portal features like plugin updates, downtime monitoring, and more..", + "homepage": "https://jetpack.com", + "bugs": { + "url": "https://github.com/Automattic/jetpack/labels/[Plugin] Automattic For Agencies Client" + }, + "repository": { + "type": "git", + "url": "https://github.com/Automattic/jetpack.git", + "directory": "projects/plugins/automattic-for-agencies-client" + }, + "license": "GPL-2.0-or-later", + "author": "Automattic", + "scripts": { + "build": "pnpm jetpack build plugins/automattic-for-agencies-client plugins/jetpack -v --no-pnpm-install --production", + "clean": "rm -rf output", + "config:decrypt": "openssl enc -md sha1 -aes-256-cbc -d -pass env:CONFIG_KEY -in ./node_modules/jetpack-e2e-commons/config/encrypted.enc -out ./config/local.cjs", + "distclean": "rm -rf node_modules", + "env:up": "e2e-env start --activate-plugins automattic-for-agencies-client", + "env:down": "e2e-env stop", + "env:reset": "e2e-env reset --activate-plugins automattic-for-agencies-client", + "tunnel:up": "tunnel up", + "tunnel:reset": "tunnel reset", + "tunnel:down": "tunnel down", + "pretest:run": "pnpm run clean", + "test:run": ". ./node_modules/jetpack-e2e-commons/bin/app-password.sh && playwright install && NODE_CONFIG_DIR='./config' ALLURE_RESULTS_DIR=./output/allure-results NODE_PATH=\"$PWD/node_modules\" playwright test --config=./playwright.config.mjs" + }, + "devDependencies": { + "@playwright/test": "1.39.0", + "allure-playwright": "2.9.2", + "config": "3.3.7", + "jetpack-e2e-commons": "workspace:*" + }, + "browserslist": [], + "ci": { + "targets": [ + "plugins/automattic-for-agencies-client", + "tools/e2e-commons" + ], + "pluginSlug": "automattic-for-agencies-client", + "mirrorName": "jetpack-automattic-for-agencies-client" + } +} diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs b/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs new file mode 100644 index 0000000000000..b5d057df1a7b8 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/playwright.config.mjs @@ -0,0 +1 @@ +export { default } from 'jetpack-e2e-commons/config/playwright.config.default.mjs'; diff --git a/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js b/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js new file mode 100644 index 0000000000000..ebf9e08da5043 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/e2e/specs/start.test.js @@ -0,0 +1,18 @@ +import { test } from '@playwright/test'; +import { Sidebar, DashboardPage } from 'jetpack-e2e-commons/pages/wp-admin/index.js'; +import { prerequisitesBuilder } from 'jetpack-e2e-commons/env/prerequisites.js'; +import playwrightConfig from '../playwright.config.mjs'; + +test.describe( 'Starter plugin!', () => { + test.beforeEach( async ( { browser } ) => { + const page = await browser.newPage( playwrightConfig.use ); + await prerequisitesBuilder( page ).withCleanEnv().withLoggedIn( true ).build(); + await page.close(); + } ); + + // eslint-disable-next-line playwright/expect-expect -- TODO: Fix/justify this. + test( 'Visit Jetpack page', async ( { page } ) => { + await DashboardPage.visit( page ); + await ( await Sidebar.init( page ) ).selectJetpack(); + } ); +} ); diff --git a/projects/plugins/automattic-for-agencies-client/tests/php/bootstrap.php b/projects/plugins/automattic-for-agencies-client/tests/php/bootstrap.php new file mode 100644 index 0000000000000..42dac6a10e9e7 --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/tests/php/bootstrap.php @@ -0,0 +1,17 @@ +assertTrue( class_exists( 'Automattic_For_Agencies_Client' ) ); + } +} diff --git a/projects/plugins/automattic-for-agencies-client/webpack.config.js b/projects/plugins/automattic-for-agencies-client/webpack.config.js new file mode 100644 index 0000000000000..68e5568c14b8d --- /dev/null +++ b/projects/plugins/automattic-for-agencies-client/webpack.config.js @@ -0,0 +1,57 @@ +const path = require( 'path' ); +const jetpackWebpackConfig = require( '@automattic/jetpack-webpack-config/webpack' ); + +module.exports = [ + { + entry: { + index: './src/js/index.js', + }, + mode: jetpackWebpackConfig.mode, + devtool: jetpackWebpackConfig.devtool, + output: { + ...jetpackWebpackConfig.output, + path: path.resolve( './build' ), + }, + optimization: { + ...jetpackWebpackConfig.optimization, + }, + resolve: { + ...jetpackWebpackConfig.resolve, + }, + node: false, + plugins: [ + ...jetpackWebpackConfig.StandardPlugins( { + DependencyExtractionPlugin: { injectPolyfill: true }, + } ), + ], + module: { + strictExportPresence: true, + rules: [ + // Transpile JavaScript + jetpackWebpackConfig.TranspileRule( { + exclude: /node_modules\//, + } ), + + // Transpile @automattic/jetpack-* in node_modules too. + jetpackWebpackConfig.TranspileRule( { + includeNodeModules: [ '@automattic/jetpack-' ], + } ), + + // Handle CSS. + jetpackWebpackConfig.CssRule( { + extensions: [ 'css', 'sass', 'scss' ], + extraLoaders: [ 'sass-loader' ], + } ), + + // Handle images. + jetpackWebpackConfig.FileRule(), + ], + }, + externals: { + ...jetpackWebpackConfig.externals, + jetpackConfig: JSON.stringify( { + consumer_slug: 'automattic-for-agencies-client', + } ), + }, + }, +];