From 22b55e40f91f491d2676a6908abb6212777d29c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 09:13:07 +0000 Subject: [PATCH 01/14] chore(deps-dev): bump @wordpress/browserslist-config Bumps [@wordpress/browserslist-config](https://github.com/WordPress/gutenberg/tree/HEAD/packages/browserslist-config) from 5.37.0 to 5.38.0. - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/browserslist-config/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/browserslist-config@5.38.0/packages/browserslist-config) --- updated-dependencies: - dependency-name: "@wordpress/browserslist-config" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b7e24c20f7..a04f15c18e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.13", "@types/wordpress__components": "^23.0.12", - "@wordpress/browserslist-config": "^5.37.0", + "@wordpress/browserslist-config": "^5.38.0", "eslint": "^7.32.0", "lint-staged": "^15.2.2", "newspack-scripts": "^5.3.0", @@ -7286,9 +7286,9 @@ "dev": true }, "node_modules/@wordpress/browserslist-config": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.37.0.tgz", - "integrity": "sha512-ntFx1d2m4q8qTEqqV8k8GrnRVpREJkcwWv+y8XU8drPwXIGGCGDoO5HqB9d+nJUi3KlBC/re1OkijDfRlCNVbA==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.38.0.tgz", + "integrity": "sha512-WUIV11IHIVVzmhwcsFZdbOrdad5tGRJ42iv5dDdjymmdP1EQ+xuu58lynU2Y/M0KaARPL+32cYy85NPdD4V49A==", "dev": true, "engines": { "node": ">=14" @@ -37643,9 +37643,9 @@ } }, "@wordpress/browserslist-config": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.37.0.tgz", - "integrity": "sha512-ntFx1d2m4q8qTEqqV8k8GrnRVpREJkcwWv+y8XU8drPwXIGGCGDoO5HqB9d+nJUi3KlBC/re1OkijDfRlCNVbA==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.38.0.tgz", + "integrity": "sha512-WUIV11IHIVVzmhwcsFZdbOrdad5tGRJ42iv5dDdjymmdP1EQ+xuu58lynU2Y/M0KaARPL+32cYy85NPdD4V49A==", "dev": true }, "@wordpress/components": { diff --git a/package.json b/package.json index 2370814691..0171b618df 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.13", "@types/wordpress__components": "^23.0.12", - "@wordpress/browserslist-config": "^5.37.0", + "@wordpress/browserslist-config": "^5.38.0", "eslint": "^7.32.0", "lint-staged": "^15.2.2", "newspack-scripts": "^5.3.0", From 252e64747538b169d59fc86e943b42be192efae0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 09:15:16 +0000 Subject: [PATCH 02/14] chore(deps-dev): bump @rushstack/eslint-patch from 1.10.1 to 1.10.2 Bumps [@rushstack/eslint-patch](https://github.com/microsoft/rushstack/tree/HEAD/eslint/eslint-patch) from 1.10.1 to 1.10.2. - [Changelog](https://github.com/microsoft/rushstack/blob/main/eslint/eslint-patch/CHANGELOG.md) - [Commits](https://github.com/microsoft/rushstack/commits/@rushstack/eslint-patch_v1.10.2/eslint/eslint-patch) --- updated-dependencies: - dependency-name: "@rushstack/eslint-patch" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a04f15c18e..3b7b3a268d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "tachyons": "^4.12.0" }, "devDependencies": { - "@rushstack/eslint-patch": "^1.10.1", + "@rushstack/eslint-patch": "^1.10.2", "@testing-library/react": "^12.1.4", "@types/qs": "^6.9.14", "@types/react": "^17.0.75", @@ -4401,9 +4401,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", - "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", + "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true }, "node_modules/@semantic-release/changelog": { @@ -35378,9 +35378,9 @@ } }, "@rushstack/eslint-patch": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", - "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", + "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true }, "@semantic-release/changelog": { diff --git a/package.json b/package.json index 0171b618df..6633dca396 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "npm": "8" }, "devDependencies": { - "@rushstack/eslint-patch": "^1.10.1", + "@rushstack/eslint-patch": "^1.10.2", "@testing-library/react": "^12.1.4", "@types/qs": "^6.9.14", "@types/react": "^17.0.75", From 0d415b2ef4a5101700d1a1e1852f201759e5c244 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 09:22:19 +0000 Subject: [PATCH 03/14] chore(deps-dev): bump @types/wordpress__blocks from 12.5.13 to 12.5.14 Bumps [@types/wordpress__blocks](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/wordpress__blocks) from 12.5.13 to 12.5.14. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/wordpress__blocks) --- updated-dependencies: - dependency-name: "@types/wordpress__blocks" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 542 ++++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 472 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3b7b3a268d..f6fd8c4547 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@types/qs": "^6.9.14", "@types/react": "^17.0.75", "@types/wordpress__block-editor": "^11.5.14", - "@types/wordpress__blocks": "^12.5.13", + "@types/wordpress__blocks": "^12.5.14", "@types/wordpress__components": "^23.0.12", "@wordpress/browserslist-config": "^5.38.0", "eslint": "^7.32.0", @@ -5596,18 +5596,48 @@ } }, "node_modules/@types/wordpress__blocks": { - "version": "12.5.13", - "resolved": "https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.5.13.tgz", - "integrity": "sha512-k2nlqxdNyaL6Uf/+zWhXeJJMKaPpikh5GdunNhNtpI1nSHM18Y+86y3rzjt1n0WcUQc1XkosvhcAEiGNYIhL9g==", + "version": "12.5.14", + "resolved": "https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.5.14.tgz", + "integrity": "sha512-eXEnCRKYu+39KEJ/OYpoYxWTATxI+eJHd+meMGZ14hYydFtxA0Y8M7zJT8D8f4klBo8wINLvP7zrO8vYrjWjPQ==", "dev": true, "dependencies": { "@types/react": "*", - "@types/wordpress__components": "*", "@types/wordpress__shortcode": "*", + "@wordpress/components": "^27.2.0", "@wordpress/data": "^9.13.0", "@wordpress/element": "^5.0.0" } }, + "node_modules/@types/wordpress__blocks/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/@types/wordpress__blocks/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "dev": true, + "optional": true + }, + "node_modules/@types/wordpress__blocks/node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@types/wordpress__blocks/node_modules/@types/react": { "version": "18.2.57", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz", @@ -5628,21 +5658,84 @@ "@types/react": "*" } }, + "node_modules/@types/wordpress__blocks/node_modules/@wordpress/components": { + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-27.3.0.tgz", + "integrity": "sha512-QNMs0g+7Tfg84pTBHffQg4wWhjo7l04EQ5lpONfiizJMTaWalGDxO0/uyVh3VXgQRWM/rTezPGhvdhotktAVYA==", + "dev": true, + "dependencies": { + "@ariakit/react": "^0.3.12", + "@babel/runtime": "^7.16.0", + "@emotion/cache": "^11.7.1", + "@emotion/css": "^11.7.1", + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.0.2", + "@emotion/styled": "^11.6.0", + "@emotion/utils": "^1.0.0", + "@floating-ui/react-dom": "^2.0.8", + "@types/gradient-parser": "0.1.3", + "@types/highlight-words-core": "1.2.1", + "@use-gesture/react": "^10.2.24", + "@wordpress/a11y": "^3.55.0", + "@wordpress/compose": "^6.32.0", + "@wordpress/date": "^4.55.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/dom": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/escape-html": "^2.55.0", + "@wordpress/hooks": "^3.55.0", + "@wordpress/html-entities": "^3.55.0", + "@wordpress/i18n": "^4.55.0", + "@wordpress/icons": "^9.46.0", + "@wordpress/is-shallow-equal": "^4.55.0", + "@wordpress/keycodes": "^3.55.0", + "@wordpress/primitives": "^3.53.0", + "@wordpress/private-apis": "^0.37.0", + "@wordpress/rich-text": "^6.32.0", + "@wordpress/warning": "^2.55.0", + "change-case": "^4.1.2", + "classnames": "^2.3.1", + "colord": "^2.7.0", + "date-fns": "^3.6.0", + "deepmerge": "^4.3.0", + "downshift": "^6.0.15", + "fast-deep-equal": "^3.1.3", + "framer-motion": "^10.13.0", + "gradient-parser": "^0.1.5", + "highlight-words-core": "^1.2.2", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "path-to-regexp": "^6.2.1", + "re-resizable": "^6.4.0", + "react-colorful": "^5.3.1", + "remove-accents": "^0.5.0", + "use-lilius": "^2.0.5", + "uuid": "^9.0.1", + "valtio": "1.7.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/@types/wordpress__blocks/node_modules/@wordpress/compose": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.28.0.tgz", - "integrity": "sha512-Vx1SDgG3wIaiB/sUZcYB6csG0s5H3Lv5p9oKy8NDkA9dVfHoUz/XLwdx/yzsB3mqvDcZqReEQeoYHP7F4HeWqA==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.32.0.tgz", + "integrity": "sha512-5NM1vsYaZO9kXYuW8vD/DdvvTpPZMJuy9uTBiFGpGP2rGGD3K08WYqHWG7f4t/9GWIw4GfPQVD3mPzGubsoimQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^3.51.0", - "@wordpress/dom": "^3.51.0", - "@wordpress/element": "^5.28.0", - "@wordpress/is-shallow-equal": "^4.51.0", - "@wordpress/keycodes": "^3.51.0", - "@wordpress/priority-queue": "^2.51.0", - "@wordpress/undo-manager": "^0.11.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/dom": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/is-shallow-equal": "^4.55.0", + "@wordpress/keycodes": "^3.55.0", + "@wordpress/priority-queue": "^2.55.0", + "@wordpress/undo-manager": "^0.15.0", "change-case": "^4.1.2", "clipboard": "^2.0.11", "mousetrap": "^1.6.5", @@ -5656,19 +5749,19 @@ } }, "node_modules/@types/wordpress__blocks/node_modules/@wordpress/data": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.21.0.tgz", - "integrity": "sha512-jEAWHcR+xlnI+V0l5N2WLZrZ7THZ+wQjIs5gDHg1wcRLWo7oxe8JHPQ4sIf0zqNaCwj3/svXFvg7pkaJqkDHAw==", + "version": "9.25.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.25.0.tgz", + "integrity": "sha512-8WMOUZjSO7GERknEfycmUHM31zi/h8O8FB9kE6L88rKn6+v2DoSUh0nOgCIPcJ3aWo20XCOrCxiaZf9k1FW2VA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.28.0", - "@wordpress/deprecated": "^3.51.0", - "@wordpress/element": "^5.28.0", - "@wordpress/is-shallow-equal": "^4.51.0", - "@wordpress/priority-queue": "^2.51.0", - "@wordpress/private-apis": "^0.33.0", - "@wordpress/redux-routine": "^4.51.0", + "@wordpress/compose": "^6.32.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/is-shallow-equal": "^4.55.0", + "@wordpress/priority-queue": "^2.55.0", + "@wordpress/private-apis": "^0.37.0", + "@wordpress/redux-routine": "^4.55.0", "deepmerge": "^4.3.0", "equivalent-key-map": "^0.2.2", "is-plain-object": "^5.0.0", @@ -5685,15 +5778,15 @@ } }, "node_modules/@types/wordpress__blocks/node_modules/@wordpress/element": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.28.0.tgz", - "integrity": "sha512-NEoT3mgF+pJvnhnaTQeLuhSgC6ThfooMfl7OoEyIthRZpUtgKFakmMUU2T6ODzP2+k2DV/jNCfoBZ/Haekmwew==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.32.0.tgz", + "integrity": "sha512-tHphxNspSIw3UFZ7oRUc1UlmHnViDbiACmNqWyUoVfIOv/f9bKe1UMrPxLKaF3HoSmAkQuWcLJu+/k202a40xA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@wordpress/escape-html": "^2.51.0", + "@wordpress/escape-html": "^2.55.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.2.0", @@ -5703,10 +5796,24 @@ "node": ">=12" } }, + "node_modules/@types/wordpress__blocks/node_modules/@wordpress/icons": { + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.46.0.tgz", + "integrity": "sha512-SsjZ2aw6FEYHW0pHVXWGRQibBY//9qvkrzGFNsnxPz9e7yUu+Nqt/1Hr2/J+5qGdCBZtTzDvCkAw5zf0LtEfwA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.0", + "@wordpress/element": "^5.32.0", + "@wordpress/primitives": "^3.53.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@types/wordpress__blocks/node_modules/@wordpress/private-apis": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.33.0.tgz", - "integrity": "sha512-Dc8y7m17gAKnDVFOPDqPcb2jo9cDhDNikLdepTkRXLywYUPT2PFH4GrXsVK87BLc+nCIqgs3DFU/AJx1db4y/w==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.37.0.tgz", + "integrity": "sha512-M4o0e7ak/LXNmGL54ABuvJFZRstXKvB0DVkN9aC9hWjzUWlTCzY8bx9z/6im12dwrvcOz2YAl938EkmOhuWvbA==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0" @@ -5715,19 +5822,90 @@ "node": ">=12" } }, + "node_modules/@types/wordpress__blocks/node_modules/@wordpress/rich-text": { + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.32.0.tgz", + "integrity": "sha512-V2RazmdGKZqAXYizIoLL+sWY9XQJuaQMILIYIXpOWmJFWwnJNgw3WrMo7CpMHmsu8qTrHTdtEIn3PtGu4RGzFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "^3.55.0", + "@wordpress/compose": "^6.32.0", + "@wordpress/data": "^9.25.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/escape-html": "^2.55.0", + "@wordpress/i18n": "^4.55.0", + "@wordpress/keycodes": "^3.55.0", + "memize": "^2.1.0", + "rememo": "^4.0.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, "node_modules/@types/wordpress__blocks/node_modules/@wordpress/undo-manager": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.11.0.tgz", - "integrity": "sha512-f9izRRzLlZRBXhve1OU9sBGWRvfGU94nhENN7gtf7l31q3xdsnrGf5NE/R1yhwCAHifUFF1dVcIGC1cfT2jQIg==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.15.0.tgz", + "integrity": "sha512-lPnoL7K1YQf+PIrnjwgTImtDu30mwrKJ80nIUF2PhI7cNbInnb8RPYrFGJJ3xwTHKkKwWlu5oCR9rFttnFiYGg==", "dev": true, "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/is-shallow-equal": "^4.51.0" + "@wordpress/is-shallow-equal": "^4.55.0" }, "engines": { "node": ">=12" } }, + "node_modules/@types/wordpress__blocks/node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/@types/wordpress__blocks/node_modules/framer-motion": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", + "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@types/wordpress__blocks/node_modules/memize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz", + "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==", + "dev": true + }, + "node_modules/@types/wordpress__blocks/node_modules/path-to-regexp": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "dev": true + }, "node_modules/@types/wordpress__blocks/node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -5759,6 +5937,12 @@ "integrity": "sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ==", "dev": true }, + "node_modules/@types/wordpress__blocks/node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "dev": true + }, "node_modules/@types/wordpress__blocks/node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -5768,6 +5952,60 @@ "loose-envify": "^1.1.0" } }, + "node_modules/@types/wordpress__blocks/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@types/wordpress__blocks/node_modules/valtio": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-1.7.0.tgz", + "integrity": "sha512-3Tnix66EERwMcrl1rfB3ylcewOcL5L/GiPmC3FlVNreQzqf2jufEeqlNmgnLgSGchkEmH3WYVtS+x6Qw4r+yzQ==", + "dev": true, + "dependencies": { + "proxy-compare": "2.3.0", + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@babel/helper-module-imports": ">=7.12", + "@babel/types": ">=7.13", + "aslemammad-vite-plugin-macro": ">=1.0.0-alpha.1", + "babel-plugin-macros": ">=3.0", + "react": ">=16.8", + "vite": ">=2.8.6" + }, + "peerDependenciesMeta": { + "@babel/helper-module-imports": { + "optional": true + }, + "@babel/types": { + "optional": true + }, + "aslemammad-vite-plugin-macro": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + }, + "react": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/@types/wordpress__components": { "version": "23.0.12", "resolved": "https://registry.npmjs.org/@types/wordpress__components/-/wordpress__components-23.0.12.tgz", @@ -36306,18 +36544,44 @@ } }, "@types/wordpress__blocks": { - "version": "12.5.13", - "resolved": "https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.5.13.tgz", - "integrity": "sha512-k2nlqxdNyaL6Uf/+zWhXeJJMKaPpikh5GdunNhNtpI1nSHM18Y+86y3rzjt1n0WcUQc1XkosvhcAEiGNYIhL9g==", + "version": "12.5.14", + "resolved": "https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.5.14.tgz", + "integrity": "sha512-eXEnCRKYu+39KEJ/OYpoYxWTATxI+eJHd+meMGZ14hYydFtxA0Y8M7zJT8D8f4klBo8wINLvP7zrO8vYrjWjPQ==", "dev": true, "requires": { "@types/react": "*", - "@types/wordpress__components": "*", "@types/wordpress__shortcode": "*", + "@wordpress/components": "^27.2.0", "@wordpress/data": "^9.13.0", "@wordpress/element": "^5.0.0" }, "dependencies": { + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, + "optional": true, + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "dev": true, + "optional": true + }, + "@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dev": true, + "requires": { + "@floating-ui/dom": "^1.6.1" + } + }, "@types/react": { "version": "18.2.57", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz", @@ -36338,21 +36602,77 @@ "@types/react": "*" } }, + "@wordpress/components": { + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-27.3.0.tgz", + "integrity": "sha512-QNMs0g+7Tfg84pTBHffQg4wWhjo7l04EQ5lpONfiizJMTaWalGDxO0/uyVh3VXgQRWM/rTezPGhvdhotktAVYA==", + "dev": true, + "requires": { + "@ariakit/react": "^0.3.12", + "@babel/runtime": "^7.16.0", + "@emotion/cache": "^11.7.1", + "@emotion/css": "^11.7.1", + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.0.2", + "@emotion/styled": "^11.6.0", + "@emotion/utils": "^1.0.0", + "@floating-ui/react-dom": "^2.0.8", + "@types/gradient-parser": "0.1.3", + "@types/highlight-words-core": "1.2.1", + "@use-gesture/react": "^10.2.24", + "@wordpress/a11y": "^3.55.0", + "@wordpress/compose": "^6.32.0", + "@wordpress/date": "^4.55.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/dom": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/escape-html": "^2.55.0", + "@wordpress/hooks": "^3.55.0", + "@wordpress/html-entities": "^3.55.0", + "@wordpress/i18n": "^4.55.0", + "@wordpress/icons": "^9.46.0", + "@wordpress/is-shallow-equal": "^4.55.0", + "@wordpress/keycodes": "^3.55.0", + "@wordpress/primitives": "^3.53.0", + "@wordpress/private-apis": "^0.37.0", + "@wordpress/rich-text": "^6.32.0", + "@wordpress/warning": "^2.55.0", + "change-case": "^4.1.2", + "classnames": "^2.3.1", + "colord": "^2.7.0", + "date-fns": "^3.6.0", + "deepmerge": "^4.3.0", + "downshift": "^6.0.15", + "fast-deep-equal": "^3.1.3", + "framer-motion": "^10.13.0", + "gradient-parser": "^0.1.5", + "highlight-words-core": "^1.2.2", + "is-plain-object": "^5.0.0", + "memize": "^2.1.0", + "path-to-regexp": "^6.2.1", + "re-resizable": "^6.4.0", + "react-colorful": "^5.3.1", + "remove-accents": "^0.5.0", + "use-lilius": "^2.0.5", + "uuid": "^9.0.1", + "valtio": "1.7.0" + } + }, "@wordpress/compose": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.28.0.tgz", - "integrity": "sha512-Vx1SDgG3wIaiB/sUZcYB6csG0s5H3Lv5p9oKy8NDkA9dVfHoUz/XLwdx/yzsB3mqvDcZqReEQeoYHP7F4HeWqA==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-6.32.0.tgz", + "integrity": "sha512-5NM1vsYaZO9kXYuW8vD/DdvvTpPZMJuy9uTBiFGpGP2rGGD3K08WYqHWG7f4t/9GWIw4GfPQVD3mPzGubsoimQ==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^3.51.0", - "@wordpress/dom": "^3.51.0", - "@wordpress/element": "^5.28.0", - "@wordpress/is-shallow-equal": "^4.51.0", - "@wordpress/keycodes": "^3.51.0", - "@wordpress/priority-queue": "^2.51.0", - "@wordpress/undo-manager": "^0.11.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/dom": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/is-shallow-equal": "^4.55.0", + "@wordpress/keycodes": "^3.55.0", + "@wordpress/priority-queue": "^2.55.0", + "@wordpress/undo-manager": "^0.15.0", "change-case": "^4.1.2", "clipboard": "^2.0.11", "mousetrap": "^1.6.5", @@ -36360,19 +36680,19 @@ } }, "@wordpress/data": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.21.0.tgz", - "integrity": "sha512-jEAWHcR+xlnI+V0l5N2WLZrZ7THZ+wQjIs5gDHg1wcRLWo7oxe8JHPQ4sIf0zqNaCwj3/svXFvg7pkaJqkDHAw==", + "version": "9.25.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-9.25.0.tgz", + "integrity": "sha512-8WMOUZjSO7GERknEfycmUHM31zi/h8O8FB9kE6L88rKn6+v2DoSUh0nOgCIPcJ3aWo20XCOrCxiaZf9k1FW2VA==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/compose": "^6.28.0", - "@wordpress/deprecated": "^3.51.0", - "@wordpress/element": "^5.28.0", - "@wordpress/is-shallow-equal": "^4.51.0", - "@wordpress/priority-queue": "^2.51.0", - "@wordpress/private-apis": "^0.33.0", - "@wordpress/redux-routine": "^4.51.0", + "@wordpress/compose": "^6.32.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/is-shallow-equal": "^4.55.0", + "@wordpress/priority-queue": "^2.55.0", + "@wordpress/private-apis": "^0.37.0", + "@wordpress/redux-routine": "^4.55.0", "deepmerge": "^4.3.0", "equivalent-key-map": "^0.2.2", "is-plain-object": "^5.0.0", @@ -36383,40 +36703,98 @@ } }, "@wordpress/element": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.28.0.tgz", - "integrity": "sha512-NEoT3mgF+pJvnhnaTQeLuhSgC6ThfooMfl7OoEyIthRZpUtgKFakmMUU2T6ODzP2+k2DV/jNCfoBZ/Haekmwew==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-5.32.0.tgz", + "integrity": "sha512-tHphxNspSIw3UFZ7oRUc1UlmHnViDbiACmNqWyUoVfIOv/f9bKe1UMrPxLKaF3HoSmAkQuWcLJu+/k202a40xA==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", - "@wordpress/escape-html": "^2.51.0", + "@wordpress/escape-html": "^2.55.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" } }, + "@wordpress/icons": { + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-9.46.0.tgz", + "integrity": "sha512-SsjZ2aw6FEYHW0pHVXWGRQibBY//9qvkrzGFNsnxPz9e7yUu+Nqt/1Hr2/J+5qGdCBZtTzDvCkAw5zf0LtEfwA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/element": "^5.32.0", + "@wordpress/primitives": "^3.53.0" + } + }, "@wordpress/private-apis": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.33.0.tgz", - "integrity": "sha512-Dc8y7m17gAKnDVFOPDqPcb2jo9cDhDNikLdepTkRXLywYUPT2PFH4GrXsVK87BLc+nCIqgs3DFU/AJx1db4y/w==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-0.37.0.tgz", + "integrity": "sha512-M4o0e7ak/LXNmGL54ABuvJFZRstXKvB0DVkN9aC9hWjzUWlTCzY8bx9z/6im12dwrvcOz2YAl938EkmOhuWvbA==", "dev": true, "requires": { "@babel/runtime": "^7.16.0" } }, + "@wordpress/rich-text": { + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.32.0.tgz", + "integrity": "sha512-V2RazmdGKZqAXYizIoLL+sWY9XQJuaQMILIYIXpOWmJFWwnJNgw3WrMo7CpMHmsu8qTrHTdtEIn3PtGu4RGzFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "^3.55.0", + "@wordpress/compose": "^6.32.0", + "@wordpress/data": "^9.25.0", + "@wordpress/deprecated": "^3.55.0", + "@wordpress/element": "^5.32.0", + "@wordpress/escape-html": "^2.55.0", + "@wordpress/i18n": "^4.55.0", + "@wordpress/keycodes": "^3.55.0", + "memize": "^2.1.0", + "rememo": "^4.0.2" + } + }, "@wordpress/undo-manager": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.11.0.tgz", - "integrity": "sha512-f9izRRzLlZRBXhve1OU9sBGWRvfGU94nhENN7gtf7l31q3xdsnrGf5NE/R1yhwCAHifUFF1dVcIGC1cfT2jQIg==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.15.0.tgz", + "integrity": "sha512-lPnoL7K1YQf+PIrnjwgTImtDu30mwrKJ80nIUF2PhI7cNbInnb8RPYrFGJJ3xwTHKkKwWlu5oCR9rFttnFiYGg==", "dev": true, "requires": { "@babel/runtime": "^7.16.0", - "@wordpress/is-shallow-equal": "^4.51.0" + "@wordpress/is-shallow-equal": "^4.55.0" + } + }, + "date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "dev": true + }, + "framer-motion": { + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", + "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", + "dev": true, + "requires": { + "@emotion/is-prop-valid": "^0.8.2", + "tslib": "^2.4.0" } }, + "memize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz", + "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==", + "dev": true + }, + "path-to-regexp": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "dev": true + }, "react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -36442,6 +36820,12 @@ "integrity": "sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ==", "dev": true }, + "remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "dev": true + }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -36450,6 +36834,22 @@ "requires": { "loose-envify": "^1.1.0" } + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true + }, + "valtio": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-1.7.0.tgz", + "integrity": "sha512-3Tnix66EERwMcrl1rfB3ylcewOcL5L/GiPmC3FlVNreQzqf2jufEeqlNmgnLgSGchkEmH3WYVtS+x6Qw4r+yzQ==", + "dev": true, + "requires": { + "proxy-compare": "2.3.0", + "use-sync-external-store": "1.2.0" + } } } }, diff --git a/package.json b/package.json index 6633dca396..73b6ab6e4e 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/qs": "^6.9.14", "@types/react": "^17.0.75", "@types/wordpress__block-editor": "^11.5.14", - "@types/wordpress__blocks": "^12.5.13", + "@types/wordpress__blocks": "^12.5.14", "@types/wordpress__components": "^23.0.12", "@wordpress/browserslist-config": "^5.38.0", "eslint": "^7.32.0", From a6e8a6e963b34f4858ed09bd4ea57c0cfa625f53 Mon Sep 17 00:00:00 2001 From: Derrick Koo Date: Thu, 18 Apr 2024 09:10:30 -0600 Subject: [PATCH 04/14] refactor(data-events): add abstract Connector class for shared methods (#3015) * refactor: add abstract Connector class for shared methods * chore: remove unused imports --- includes/class-newspack.php | 1 + .../connectors/class-activecampaign.php | 107 +-------------- .../connectors/class-connector.php | 122 ++++++++++++++++++ .../connectors/class-mailchimp.php | 110 +--------------- 4 files changed, 126 insertions(+), 214 deletions(-) create mode 100644 includes/data-events/connectors/class-connector.php diff --git a/includes/class-newspack.php b/includes/class-newspack.php index 06e38ffdc1..48dfa27f32 100644 --- a/includes/class-newspack.php +++ b/includes/class-newspack.php @@ -86,6 +86,7 @@ private function includes() { include_once NEWSPACK_ABSPATH . 'includes/data-events/class-popups.php'; include_once NEWSPACK_ABSPATH . 'includes/data-events/class-memberships.php'; include_once NEWSPACK_ABSPATH . 'includes/data-events/connectors/ga4/class-ga4.php'; + include_once NEWSPACK_ABSPATH . 'includes/data-events/connectors/class-connector.php'; include_once NEWSPACK_ABSPATH . 'includes/data-events/connectors/class-mailchimp.php'; include_once NEWSPACK_ABSPATH . 'includes/data-events/connectors/class-activecampaign.php'; include_once NEWSPACK_ABSPATH . 'includes/data-events/class-woo-user-registration.php'; diff --git a/includes/data-events/connectors/class-activecampaign.php b/includes/data-events/connectors/class-activecampaign.php index d85b856882..770bbee297 100644 --- a/includes/data-events/connectors/class-activecampaign.php +++ b/includes/data-events/connectors/class-activecampaign.php @@ -10,15 +10,13 @@ use Newspack\Data_Events; use Newspack\Newspack_Newsletters; use Newspack\Reader_Activation; -use Newspack\WooCommerce_Connection; -use Newspack\Donations; defined( 'ABSPATH' ) || exit; /** * Main Class. */ -class ActiveCampaign { +class ActiveCampaign extends Connector { /** * Constructor. */ @@ -61,109 +59,6 @@ public static function put( $contact ) { return \Newspack_Newsletters_Subscription::add_contact( $contact, $master_list_id ); } - /** - * Handle a reader registering. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function reader_registered( $timestamp, $data, $client_id ) { - $account_key = Newspack_Newsletters::get_metadata_key( 'account' ); - $registration_date_key = Newspack_Newsletters::get_metadata_key( 'registration_date' ); - $metadata = [ - $account_key => $data['user_id'], - $registration_date_key => gmdate( Newspack_Newsletters::METADATA_DATE_FORMAT, $timestamp ), - ]; - if ( isset( $data['metadata']['current_page_url'] ) ) { - $metadata[ Newspack_Newsletters::get_metadata_key( 'registration_page' ) ] = $data['metadata']['current_page_url']; - } - if ( isset( $data['metadata']['registration_method'] ) ) { - $metadata[ Newspack_Newsletters::get_metadata_key( 'registration_method' ) ] = $data['metadata']['registration_method']; - } - /** - * Filters the contact metadata sent to the ESP when a reader account is registered for the first time. - * - * @param array $metadata The contact metadata. - * @param int $user_id The ID of the user. - * - * @return array The modified contact metadata. - */ - $metadata = \apply_filters( 'newspack_data_events_reader_registered_metadata', $metadata, $data['user_id'] ); - $contact = [ - 'email' => $data['email'], - 'metadata' => $metadata, - ]; - self::put( $contact ); - } - - /** - * Sync reader data on login. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function reader_logged_in( $timestamp, $data, $client_id ) { - if ( empty( $data['email'] ) || empty( $data['user_id'] ) ) { - return; - } - - $customer = new \WC_Customer( $data['user_id'] ); - - // If user is not a Woo customer, don't need to sync them. - if ( ! $customer->get_order_count() ) { - return; - } - - $contact = WooCommerce_Connection::get_contact_from_customer( $customer ); - - self::put( $contact ); - } - - /** - * Handle a completed order of any type. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function order_completed( $timestamp, $data, $client_id ) { - if ( ! isset( $data['platform_data']['order_id'] ) ) { - return; - } - - $order_id = $data['platform_data']['order_id']; - $contact = WooCommerce_Connection::get_contact_from_order( $order_id, $data['referer'], true ); - - if ( ! $contact ) { - return; - } - - self::put( $contact ); - } - - /** - * Handle a change in subscription status. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function subscription_updated( $timestamp, $data, $client_id ) { - if ( empty( $data['status_before'] ) || empty( $data['status_after'] ) || empty( $data['subscription_id'] ) ) { - return; - } - - $contact = WooCommerce_Connection::get_contact_from_order( $data['subscription_id'] ); - - if ( ! $contact ) { - return; - } - - self::put( $contact ); - } - /** * Handle newsletter subscription update. * diff --git a/includes/data-events/connectors/class-connector.php b/includes/data-events/connectors/class-connector.php new file mode 100644 index 0000000000..9e8e20e6ee --- /dev/null +++ b/includes/data-events/connectors/class-connector.php @@ -0,0 +1,122 @@ + $data['user_id'], + $registration_date_key => gmdate( Newspack_Newsletters::METADATA_DATE_FORMAT, $timestamp ), + ]; + if ( isset( $data['metadata']['current_page_url'] ) ) { + $metadata[ Newspack_Newsletters::get_metadata_key( 'registration_page' ) ] = $data['metadata']['current_page_url']; + } + if ( isset( $data['metadata']['registration_method'] ) ) { + $metadata[ Newspack_Newsletters::get_metadata_key( 'registration_method' ) ] = $data['metadata']['registration_method']; + } + /** + * Filters the contact metadata sent to the ESP when a reader account is registered for the first time. + * + * @param array $metadata The contact metadata. + * @param int $user_id The ID of the user. + * + * @return array The modified contact metadata. + */ + $metadata = \apply_filters( 'newspack_data_events_reader_registered_metadata', $metadata, $data['user_id'] ); + $contact = [ + 'email' => $data['email'], + 'metadata' => $metadata, + ]; + + static::put( $contact ); + } + + /** + * Sync reader data on login. + * + * @param int $timestamp Timestamp of the event. + * @param array $data Data associated with the event. + * @param int $client_id ID of the client that triggered the event. + */ + public static function reader_logged_in( $timestamp, $data, $client_id ) { + if ( empty( $data['email'] ) || empty( $data['user_id'] ) ) { + return; + } + + $customer = new \WC_Customer( $data['user_id'] ); + + // If user is not a Woo customer, don't need to sync them. + if ( ! $customer->get_order_count() ) { + return; + } + + $contact = WooCommerce_Connection::get_contact_from_customer( $customer ); + + static::put( $contact ); + } + + /** + * Handle a completed order of any type. + * + * @param int $timestamp Timestamp of the event. + * @param array $data Data associated with the event. + * @param int $client_id ID of the client that triggered the event. + */ + public static function order_completed( $timestamp, $data, $client_id ) { + if ( ! isset( $data['platform_data']['order_id'] ) ) { + return; + } + + $order_id = $data['platform_data']['order_id']; + $contact = WooCommerce_Connection::get_contact_from_order( $order_id, $data['referer'], true ); + + if ( ! $contact ) { + return; + } + + static::put( $contact ); + } + + /** + * Handle a change in subscription status. + * + * @param int $timestamp Timestamp of the event. + * @param array $data Data associated with the event. + * @param int $client_id ID of the client that triggered the event. + */ + public static function subscription_updated( $timestamp, $data, $client_id ) { + if ( empty( $data['status_before'] ) || empty( $data['status_after'] ) || empty( $data['subscription_id'] ) ) { + return; + } + + $contact = WooCommerce_Connection::get_contact_from_order( $data['subscription_id'] ); + + if ( ! $contact ) { + return; + } + + static::put( $contact ); + } +} diff --git a/includes/data-events/connectors/class-mailchimp.php b/includes/data-events/connectors/class-mailchimp.php index 9b32329342..e4c01c9e60 100644 --- a/includes/data-events/connectors/class-mailchimp.php +++ b/includes/data-events/connectors/class-mailchimp.php @@ -12,15 +12,13 @@ use Newspack\Mailchimp_API; use Newspack\Newspack_Newsletters; use Newspack\Reader_Activation; -use Newspack\WooCommerce_Connection; -use Newspack\Donations; defined( 'ABSPATH' ) || exit; /** * Main Class. */ -class Mailchimp { +class Mailchimp extends Connector { /** * Constructor. */ @@ -57,7 +55,7 @@ private static function get_audience_id() { $audience_id = Reader_Activation::get_setting( 'mailchimp_audience_id' ); /** Attempt to use list ID from "Mailchimp for WooCommerce" */ if ( ! $audience_id && function_exists( 'mailchimp_get_list_id' ) ) { - $audience_id = mailchimp_get_list_id(); + $audience_id = \mailchimp_get_list_id(); } return ! empty( $audience_id ) ? $audience_id : false; } @@ -231,109 +229,5 @@ public static function put( $contact ) { $payload ); } - - /** - * Handle a reader registering. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function reader_registered( $timestamp, $data, $client_id ) { - $account_key = Newspack_Newsletters::get_metadata_key( 'account' ); - $registration_date_key = Newspack_Newsletters::get_metadata_key( 'registration_date' ); - $metadata = [ - $account_key => $data['user_id'], - $registration_date_key => gmdate( Newspack_Newsletters::METADATA_DATE_FORMAT, $timestamp ), - ]; - if ( isset( $data['metadata']['current_page_url'] ) ) { - $metadata[ Newspack_Newsletters::get_metadata_key( 'registration_page' ) ] = $data['metadata']['current_page_url']; - } - if ( isset( $data['metadata']['registration_method'] ) ) { - $metadata[ Newspack_Newsletters::get_metadata_key( 'registration_method' ) ] = $data['metadata']['registration_method']; - } - - /** - * Filters the contact metadata sent to the ESP when a reader account is registered for the first time. - * - * @param array $metadata The contact metadata. - * @param int $user_id The ID of the user. - * - * @return array The modified contact metadata. - */ - $metadata = \apply_filters( 'newspack_data_events_reader_registered_metadata', $metadata, $data['user_id'] ); - $contact = [ - 'email' => $data['email'], - 'metadata' => $metadata, - ]; - self::put( $contact ); - } - - /** - * Sync reader data on login. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function reader_logged_in( $timestamp, $data, $client_id ) { - if ( empty( $data['email'] ) || empty( $data['user_id'] ) ) { - return; - } - - $customer = new \WC_Customer( $data['user_id'] ); - - // If user is not a Woo customer, don't need to sync them. - if ( ! $customer->get_order_count() ) { - return; - } - - $contact = WooCommerce_Connection::get_contact_from_customer( $customer ); - - self::put( $contact ); - } - - /** - * Handle a completed order of any type. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function order_completed( $timestamp, $data, $client_id ) { - if ( ! isset( $data['platform_data']['order_id'] ) ) { - return; - } - - $order_id = $data['platform_data']['order_id']; - $contact = WooCommerce_Connection::get_contact_from_order( $order_id, $data['referer'], true ); - - if ( ! $contact ) { - return; - } - - self::put( $contact ); - } - - /** - * Handle a change in subscription status. - * - * @param int $timestamp Timestamp of the event. - * @param array $data Data associated with the event. - * @param int $client_id ID of the client that triggered the event. - */ - public static function subscription_updated( $timestamp, $data, $client_id ) { - if ( empty( $data['status_before'] ) || empty( $data['status_after'] ) || empty( $data['subscription_id'] ) ) { - return; - } - - $contact = WooCommerce_Connection::get_contact_from_order( $data['subscription_id'] ); - - if ( ! $contact ) { - return; - } - - self::put( $contact ); - } } new Mailchimp(); From 23e827be67e2b32159de5a089930c0c4f72da880 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 09:40:53 +0000 Subject: [PATCH 05/14] chore(deps-dev): bump @wordpress/browserslist-config Bumps [@wordpress/browserslist-config](https://github.com/WordPress/gutenberg/tree/HEAD/packages/browserslist-config) from 5.38.0 to 5.39.0. - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/browserslist-config/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/browserslist-config@5.39.0/packages/browserslist-config) --- updated-dependencies: - dependency-name: "@wordpress/browserslist-config" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c229e2030..902471c226 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.14", "@types/wordpress__components": "^23.0.12", - "@wordpress/browserslist-config": "^5.38.0", + "@wordpress/browserslist-config": "^5.39.0", "eslint": "^7.32.0", "lint-staged": "^15.2.2", "newspack-scripts": "^5.3.0", @@ -7524,9 +7524,9 @@ "dev": true }, "node_modules/@wordpress/browserslist-config": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.38.0.tgz", - "integrity": "sha512-WUIV11IHIVVzmhwcsFZdbOrdad5tGRJ42iv5dDdjymmdP1EQ+xuu58lynU2Y/M0KaARPL+32cYy85NPdD4V49A==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.39.0.tgz", + "integrity": "sha512-oy5CRWS3WsaFN/KAgOUIE6mmyuFu5qmKZZhQ+voCN+ifXTsj1J6ypR3RyY03Cbojy6kidyVYl3qRyMxbbUwWSQ==", "dev": true, "engines": { "node": ">=14" @@ -38043,9 +38043,9 @@ } }, "@wordpress/browserslist-config": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.38.0.tgz", - "integrity": "sha512-WUIV11IHIVVzmhwcsFZdbOrdad5tGRJ42iv5dDdjymmdP1EQ+xuu58lynU2Y/M0KaARPL+32cYy85NPdD4V49A==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-5.39.0.tgz", + "integrity": "sha512-oy5CRWS3WsaFN/KAgOUIE6mmyuFu5qmKZZhQ+voCN+ifXTsj1J6ypR3RyY03Cbojy6kidyVYl3qRyMxbbUwWSQ==", "dev": true }, "@wordpress/components": { diff --git a/package.json b/package.json index eab5144940..2fda2e4a0f 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.14", "@types/wordpress__components": "^23.0.12", - "@wordpress/browserslist-config": "^5.38.0", + "@wordpress/browserslist-config": "^5.39.0", "eslint": "^7.32.0", "lint-staged": "^15.2.2", "newspack-scripts": "^5.3.0", From 426b6f99a8c688ef7f081d604857d6426c558040 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 09:41:52 +0000 Subject: [PATCH 06/14] chore(deps): bump qs and @types/qs Bumps [qs](https://github.com/ljharb/qs) and [@types/qs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/qs). These dependencies needed to be updated together. Updates `qs` from 6.12.0 to 6.12.1 - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.12.0...v6.12.1) Updates `@types/qs` from 6.9.14 to 6.9.15 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/qs) --- updated-dependencies: - dependency-name: qs dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: "@types/qs" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 28 ++++++++++++++-------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 902471c226..21adb1bba4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "lodash": "^4.17.21", "moment": "^2.30.1", "moment-range": "^3.1.1", - "qs": "^6.12.0", + "qs": "^6.12.1", "react": "^17.0.2", "react-daterange-picker": "^2.0.1", "react-router-dom": "^5.3.4", @@ -28,7 +28,7 @@ "devDependencies": { "@rushstack/eslint-patch": "^1.10.2", "@testing-library/react": "^12.1.4", - "@types/qs": "^6.9.14", + "@types/qs": "^6.9.15", "@types/react": "^17.0.75", "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.14", @@ -5117,9 +5117,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.14", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", - "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "node_modules/@types/react": { @@ -26956,9 +26956,9 @@ } }, "node_modules/qs": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", - "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "dependencies": { "side-channel": "^1.0.6" }, @@ -36171,9 +36171,9 @@ "dev": true }, "@types/qs": { - "version": "6.9.14", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", - "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "@types/react": { @@ -51533,9 +51533,9 @@ "dev": true }, "qs": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", - "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "requires": { "side-channel": "^1.0.6" } diff --git a/package.json b/package.json index 2fda2e4a0f..d2b92eb8ea 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "devDependencies": { "@rushstack/eslint-patch": "^1.10.2", "@testing-library/react": "^12.1.4", - "@types/qs": "^6.9.14", + "@types/qs": "^6.9.15", "@types/react": "^17.0.75", "@types/wordpress__block-editor": "^11.5.14", "@types/wordpress__blocks": "^12.5.14", @@ -64,7 +64,7 @@ "lodash": "^4.17.21", "moment": "^2.30.1", "moment-range": "^3.1.1", - "qs": "^6.12.0", + "qs": "^6.12.1", "react": "^17.0.2", "react-daterange-picker": "^2.0.1", "react-router-dom": "^5.3.4", From 46067217985f904286ddb2c952ba0e1deb954e56 Mon Sep 17 00:00:00 2001 From: Adam Cassis Date: Tue, 23 Apr 2024 20:42:52 +0200 Subject: [PATCH 07/14] fix: ensure only admins can reset starter content and newspack options (#3081) --- includes/class-newspack.php | 3 +++ includes/wizards/class-wizard.php | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/includes/class-newspack.php b/includes/class-newspack.php index 48dfa27f32..8494850b73 100644 --- a/includes/class-newspack.php +++ b/includes/class-newspack.php @@ -207,6 +207,9 @@ class_exists( 'Newspack_Popups' ) && 'edit.php?post_type=' . \Newspack_Popups::N * Handle resetting of various options and content. */ public function handle_resets() { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } $redirect_url = admin_url( 'admin.php?page=newspack' ); $newspack_reset = filter_input( INPUT_GET, 'newspack_reset', FILTER_SANITIZE_FULL_SPECIAL_CHARS ); if ( 'starter-content' === $newspack_reset ) { diff --git a/includes/wizards/class-wizard.php b/includes/wizards/class-wizard.php index aa8fc8de2e..9aa0cb80ef 100644 --- a/includes/wizards/class-wizard.php +++ b/includes/wizards/class-wizard.php @@ -111,7 +111,7 @@ public function enqueue_scripts_and_styles() { $screen = get_current_screen(); - if ( Starter_Content::has_created_starter_content() ) { + if ( Starter_Content::has_created_starter_content() && current_user_can( 'manage_options' ) ) { $urls['remove_starter_content'] = esc_url( add_query_arg( array( @@ -122,7 +122,7 @@ public function enqueue_scripts_and_styles() { ); } - if ( Newspack::is_debug_mode() ) { + if ( Newspack::is_debug_mode() && current_user_can( 'manage_options' ) ) { $urls['components_demo'] = esc_url( admin_url( 'admin.php?page=newspack-components-demo' ) ); $urls['setup_wizard'] = esc_url( admin_url( 'admin.php?page=newspack-setup-wizard' ) ); $urls['reset_url'] = esc_url( From 4a2859b894eab499e194102b0636dc20466e0c22 Mon Sep 17 00:00:00 2001 From: Derrick Koo Date: Thu, 25 Apr 2024 09:50:57 -0600 Subject: [PATCH 08/14] feat: add product option to autocomplete orders (#3072) BREAKING CHANGE: Changes order autocompletion behavior for existing products! * feat: add product option to autocomplete orders * chore: update outdated docblock description --- .../class-woocommerce-connection.php | 5 +- .../class-woocommerce-products.php | 190 ++++++++++++++++++ 2 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 includes/reader-revenue/woocommerce/class-woocommerce-products.php diff --git a/includes/reader-revenue/woocommerce/class-woocommerce-connection.php b/includes/reader-revenue/woocommerce/class-woocommerce-connection.php index d7520696d9..97c79061cc 100644 --- a/includes/reader-revenue/woocommerce/class-woocommerce-connection.php +++ b/includes/reader-revenue/woocommerce/class-woocommerce-connection.php @@ -26,9 +26,10 @@ class WooCommerce_Connection { * @codeCoverageIgnore */ public static function init() { - include_once __DIR__ . '/class-woocommerce-order-utm.php'; - include_once __DIR__ . '/class-woocommerce-cover-fees.php'; include_once __DIR__ . '/class-woocommerce-cli.php'; + include_once __DIR__ . '/class-woocommerce-cover-fees.php'; + include_once __DIR__ . '/class-woocommerce-order-utm.php'; + include_once __DIR__ . '/class-woocommerce-products.php'; \add_action( 'admin_init', [ __CLASS__, 'disable_woocommerce_setup' ] ); \add_filter( 'option_woocommerce_subscriptions_allow_switching', [ __CLASS__, 'force_allow_subscription_switching' ], 10, 2 ); diff --git a/includes/reader-revenue/woocommerce/class-woocommerce-products.php b/includes/reader-revenue/woocommerce/class-woocommerce-products.php new file mode 100644 index 0000000000..e119b9c9bb --- /dev/null +++ b/includes/reader-revenue/woocommerce/class-woocommerce-products.php @@ -0,0 +1,190 @@ + [ + 'id' => '_newspack_autocomplete_orders', + 'wrapper_class' => 'show_if_simple', + 'label' => __( 'Auto-complete orders', 'newspack-plugin' ), + 'description' => __( 'Allow orders containing this product to automatically complete upon successful payment.', 'newspack-plugin' ), + 'default' => 'yes', + ], + ]; + } + + /** + * Get the value of a custom product option, taking defaults into account. + * + * @param \WC_Product|int $product The product object or ID. + * @param string $option_name The name of the option. + * + * @return bool|null The value of the option as converted by wc_string_to_bool, + * or null if the product or option isn't valid. + */ + public static function get_custom_option_value( $product, $option_name ) { + $custom_options = self::get_custom_options(); + if ( ! isset( $custom_options[ $option_name ] ) ) { + return null; + } + + $product = is_a( $product, 'WC_Product' ) ? $product : \wc_get_product( $product ); + if ( ! $product ) { + return null; + } + + $custom_option = $custom_options[ $option_name ]; + $meta_key = $custom_option['id']; + $option_value = $product->meta_exists( $meta_key ) ? $product->get_meta( $meta_key ) : $custom_option['default']; + return \wc_string_to_bool( $option_value ); + } + + /** + * Add custom options to the Product Data panel. + * See: https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/admin/wc-admin-functions.php#L574 + * + * @param array $options Keyed array of product type options. + * + * @return array + */ + public static function show_custom_product_options( $options ) { + $custom_options = self::get_custom_options(); + foreach ( $custom_options as $option_key => $option_config ) { + if ( ! isset( $options[ $option_key ] ) ) { + $options[ $option_key ] = $option_config; + } + } + return $options; + } + + /** + * Add custom options to product variations. + * + * @param int $loop The index of the variation within its parent product. + * @param array $variation_data The variation data. + * @param WP_Post $variation The variation's post object. + */ + public static function show_custom_variation_options( $loop, $variation_data, $variation ) { + if ( ! function_exists( 'wc_get_product' ) ) { + return; + } + + $custom_options = self::get_custom_options(); + $variation = \wc_get_product( $variation->ID ); + + foreach ( $custom_options as $option_key => $option_config ) { + $meta_key = $option_config['id']; + ?> + + $option_config ) { + $meta_key = $option_config['id']; + $option_value = isset( $_POST[ $meta_key ] ) ? \wc_bool_to_string( true ) : \wc_bool_to_string( false ); // phpcs:ignore WordPress.Security.NonceVerification.Missing + $product->update_meta_data( $option_config['id'], $option_value ); + } + + $product->save(); + } + + /** + * Save custom variation option values when a variation is saved. + * + * @param WC_Product_Variation $variation The variation object being saved. + * @param int $i The index of the variation within its parent product. + */ + public static function save_custom_variation_options( $variation, $i ) { + $is_legacy = is_numeric( $variation ); + + // Need to instantiate the product object on WC<3.8. + if ( $is_legacy ) { + $variation = \wc_get_product( $variation ); + } + if ( ! $variation ) { + return; + } + + $custom_options = self::get_custom_options(); + foreach ( $custom_options as $option_key => $option_config ) { + $meta_key = $option_config['id']; + $option_value = isset( $_POST[ $meta_key ] ) ? \wc_bool_to_string( true ) : \wc_bool_to_string( false ); // phpcs:ignore WordPress.Security.NonceVerification.Missing + $variation->update_meta_data( $option_config['id'], $option_value ); + } + + // Save the meta on WC<3.8. + if ( $is_legacy ) { + $variation->save(); + } + } + + /** + * If the order item is tied to a product that's set to autocomplete, then allow the order to autocomplete. + * By default, Woo will require processing for any order containing items that aren't both downloadable and virtual. + * + * @param boolean $needs_proccessing If true, the item needs processing. If not, allow the order to autocomplete. + * @param WC_Product $product The product associated with this order item. + */ + public static function require_order_processing( $needs_proccessing, $product ) { + return self::get_custom_option_value( $product, 'newspack_autocomplete_orders' ) ? false : $needs_proccessing; + } +} + +WooCommerce_Products::init(); From 9ef0e6d1de8d4dafda4d2af1304206d0f8190b15 Mon Sep 17 00:00:00 2001 From: Jared Rethman Date: Thu, 25 Apr 2024 10:51:27 -0500 Subject: [PATCH 09/14] feat(ras): skip campaign setup (#3051) * feat(ras): skip campaign setup boilerplate added new route, added fe logic * feat(ras): added `is_skipped` to prerequisite status endpoint * refactor: moved callback to named function added ui to indicate async skipping flow * feat: added skip logic to prerequisite component combined "skipped" and "active" into single `isValid` const * feat: `is_skipped` property to prerequisite type added skip logic to RAS wizard * fix: circle ci / typescript * fix: ci / eslint * refactor: remove redirect after skip added allow continue when skipped. * refactor: allow parametrized skip * refactor: revert any type cast * feat: pr feedback - added redirect, activation skip and remove `activationStep[0]` * feat: pr feedback, appended `[skipped]` to select items --- .../engagement/components/prerequisite.tsx | 19 +++--- assets/wizards/engagement/components/types.ts | 1 + .../views/reader-activation/campaign.js | 65 ++++++++++++++++++- .../views/reader-activation/complete.js | 63 ++++++++++++++---- .../views/reader-activation/index.js | 4 +- .../views/reader-activation/style.scss | 4 ++ .../class-reader-activation.php | 3 +- includes/wizards/class-engagement-wizard.php | 33 +++++++++- 8 files changed, 162 insertions(+), 30 deletions(-) diff --git a/assets/wizards/engagement/components/prerequisite.tsx b/assets/wizards/engagement/components/prerequisite.tsx index 0c8b9aa825..16ae5b86fd 100644 --- a/assets/wizards/engagement/components/prerequisite.tsx +++ b/assets/wizards/engagement/components/prerequisite.tsx @@ -23,10 +23,11 @@ export default function Prerequisite( { saveConfig, }: PrequisiteProps ) { const { href } = prerequisite; + const isValid = Boolean( prerequisite.active || prerequisite.is_skipped ); // If the prerequisite is active but has empty fields, show a warning. const hasEmptyFields = () => { - if ( prerequisite.active && prerequisite.fields && prerequisite.warning ) { + if ( isValid && prerequisite.fields && prerequisite.warning ) { const emptyValues = Object.keys( prerequisite.fields ).filter( fieldName => '' === config[ fieldName as keyof Config ] ); @@ -93,9 +94,7 @@ export default function Prerequisite( { : sprintf( // Translators: Save or Update settings. __( '%s settings', 'newspack-plugin' ), - prerequisite.active - ? __( 'Update', 'newspack-plugin' ) - : __( 'Save', 'newspack-plugin' ) + isValid ? __( 'Update', 'newspack-plugin' ) : __( 'Save', 'newspack-plugin' ) ) } @@ -138,7 +137,7 @@ export default function Prerequisite( { } } > { /* eslint-disable no-nested-ternary */ } - { ( prerequisite.active + { ( isValid ? __( 'Update ', 'newspack-plugin' ) : prerequisite.fields ? __( 'Save ', 'newspack-plugin' ) @@ -158,8 +157,10 @@ export default function Prerequisite( { ); let status = __( 'Pending', 'newspack-plugin' ); - if ( prerequisite.active ) { - status = __( 'Ready', 'newspack-plugin' ); + if ( isValid ) { + status = `${ __( 'Ready', 'newspack-plugin' ) } ${ + prerequisite.is_skipped ? `(${ __( 'Skipped', 'newspack-plugin' ) })` : '' + }`; } if ( prerequisite.is_unavailable ) { status = __( 'Unavailable', 'newspack-plugin' ); @@ -170,14 +171,14 @@ export default function Prerequisite( { className="newspack-ras-wizard__prerequisite" isMedium expandable={ ! prerequisite.is_unavailable } - collapse={ prerequisite.active } + collapse={ isValid } title={ prerequisite.label } description={ sprintf( /* translators: %s: Prerequisite status */ __( 'Status: %s', 'newspack-plugin' ), status ) } - checkbox={ prerequisite.active ? 'checked' : 'unchecked' } + checkbox={ isValid ? 'checked' : 'unchecked' } notificationLevel="info" notification={ hasEmptyFields() } > diff --git a/assets/wizards/engagement/components/types.ts b/assets/wizards/engagement/components/types.ts index e1e947d277..dc577e72e3 100644 --- a/assets/wizards/engagement/components/types.ts +++ b/assets/wizards/engagement/components/types.ts @@ -127,6 +127,7 @@ export type PrequisiteProps = { action_enabled?: boolean; disabled_text?: string; is_unavailable?: boolean; + is_skipped?: boolean; }; }; diff --git a/assets/wizards/engagement/views/reader-activation/campaign.js b/assets/wizards/engagement/views/reader-activation/campaign.js index 66bca1d63e..b9e216ab05 100644 --- a/assets/wizards/engagement/views/reader-activation/campaign.js +++ b/assets/wizards/engagement/views/reader-activation/campaign.js @@ -16,16 +16,26 @@ import { SectionHeader, Waiting, withWizardScreen, + utils, } from '../../../../components/src'; import Prompt from '../../components/prompt'; +import Router from '../../../../components/src/proxied-imports/router'; import './style.scss'; +const { useHistory } = Router; + export default withWizardScreen( () => { + const { is_skipped_campaign_setup, reader_activation_url } = newspack_engagement_wizard; + const [ inFlight, setInFlight ] = useState( false ); const [ error, setError ] = useState( false ); const [ prompts, setPrompts ] = useState( null ); const [ allReady, setAllReady ] = useState( false ); - const { reader_activation_url } = newspack_engagement_wizard; + const [ skipped, setSkipped ] = useState( { + status: '', + isSkipped: is_skipped_campaign_setup === '1', + } ); + const history = useHistory(); const fetchPrompts = () => { setError( false ); @@ -40,6 +50,45 @@ export default withWizardScreen( () => { .finally( () => setInFlight( false ) ); }; + /** + * Display prompt requiring editors to confirm skipping, on confirmation send request to + * server to store skipped option in options table and redirect back to RAS + * + * @return {void} + */ + async function onSkipCampaignSetup() { + if ( + ! utils.confirmAction( + __( + 'Are you sure you want to skip setting up a reader activation campaign?', + 'newspack-plugin' + ) + ) + ) { + return; + } + setError( false ); + setSkipped( { ...skipped, status: 'pending' } ); + try { + const request = await apiFetch( { + path: '/newspack/v1/wizard/newspack-engagement-wizard/reader-activation/skip-campaign-setup', + method: 'POST', + data: { skip: ! skipped.isSkipped }, + } ); + if ( ! request.updated ) { + setError( { message: __( 'Server not updated', 'newspack-plugin' ) } ); + setSkipped( { isSkipped: false, status: '' } ); + return; + } + setSkipped( { isSkipped: Boolean( request.skipped ), status: '' } ); + newspack_engagement_wizard.is_skipped_campaign_setup = request.skipped ? '1' : ''; + history.push( '/reader-activation/complete' ); + } catch ( err ) { + setError( err ); + setSkipped( { isSkipped: false, status: '' } ); + } + } + useEffect( () => { window.scrollTo( 0, 0 ); fetchPrompts(); @@ -83,9 +132,21 @@ export default withWizardScreen( () => { /> ) ) }
+