Compare commits

...

1787 Commits

Author SHA1 Message Date
b602edae52 Release 5.0.2 2024-08-26 16:33:59 +02:00
7ebcf324a6 Update code for the new cron-expression package
[MAILPOET-6167]
2024-08-26 14:52:05 +02:00
029b698b56 Replace cron-expression package with a fork
[MAILPOET-6167]
2024-08-26 14:52:05 +02:00
cbc2be2368 Remove the MYISAM tests
Now we have a check and warn users
InnoDB has been a default for 14 years

[MAILPOET-6184]
2024-08-26 10:20:45 +02:00
95476418fa Update used WooCommerce Subscriptions plugin in Circle CI
- latest version: 6.6.0
 - previous version: 6.5.0
2024-08-26 09:13:00 +02:00
db354f03c2 Update used Automate Woo plugin in Circle CI
- latest version: 6.0.32
 - previous version: 5.8.5
2024-08-26 09:13:00 +02:00
60c18e9cfa Update used WooCommerce plugin in Circle CI
- latest version: 9.2.2
 - previous version: 9.1.4
2024-08-26 09:13:00 +02:00
c75bcbd1ab Add Ukrainian community translations. Thanks Sasha
[MAILPOET-6198]
2024-08-26 08:55:28 +02:00
a91fd0abf1 Replace t() with __() in task scheduler translations
[MAILPOET-6200]
2024-08-25 22:42:20 +02:00
7068a7e6b1 Rename action scheduler cron option to prevent confusion for HEs
[MAILPOET-6200]
2024-08-25 22:42:20 +02:00
a94efb5563 Release 5.0.1 2024-08-23 16:32:40 +02:00
7756827b6e Remove unused parameters in MailPoet.date.toDate
The options were just set in init but there was no effect.
[MAILPOET-6197]
2024-08-23 15:36:00 +02:00
82c0b186d4 Do not apply offset when manipulating with date in the Date picker
We use DateTime component on the send page.
The DateTime component uses DateText for picking date.
We add site's offset before we pass the date to the DateTime.

The date-text component is nested in the DateTime and was also applying
offset on the date.

The second issue was we needed to convert the value to JS Date.
The MailPoet.Date.toDate expects the value to be in UTC, and we provided an already converted date.

So for offset -07:00
MailPoet.Date.toDate('2023-09-01');
ends up
Thu Aug 31 2023 17:00:00 GMT-0700 (Pacific Daylight Time) and calendar display's incorrect value.

This commit fixes it so that we don't touch offset in the DateText component.
[MAILPOET-6197]
2024-08-23 15:36:00 +02:00
f960b55acb Make sure the array contains the correct key
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
d137b55dd4 Catch errors while performing query
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
c039b220a7 Check the tables engine once per day
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
e9969b64ae Only display two table names
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
12cdba005c Add a warning if a table with incorrect engine detected
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
3c9cde6a45 Add an empty test
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
64c75fd0ca Create a new class for database notice
[MAILPOET-6184]
2024-08-22 14:33:54 +02:00
dd685f3284 Use __() for translations in new tsx file
[MAILPOET-6164]
2024-08-22 14:11:26 +02:00
b77cd11c02 Update tests
[MAILPOET-6164]
2024-08-22 14:11:26 +02:00
0f4bf52ca2 Hide machine opens in UI when opens are merged
[MAILPOET-6164]
2024-08-22 14:11:26 +02:00
8a506e7278 Show merged opens if respective setting is set
[MAILPOET-6164]
2024-08-22 14:11:26 +02:00
ee1043fce9 Add human and machine opens setting
[MAILPOET-6164]
2024-08-22 14:11:26 +02:00
c987733fba Make the form border consistent
In the renderer we only display the border if both
colour and size are set. Before this commit in the
editor we showed the border even if the colour
was transparent. This make it consistent and display
the border in the editor same way as in the renderer

[MAILPOET-6193]
2024-08-22 13:56:54 +02:00
912cd7965a Temporarily replace DROP DEFAULT with a CHANGE COLUMN for WP Playground
[MAILPOET-6185]
2024-08-22 13:28:09 +02:00
f584a673cb Temporarily skip queries incompatible with SQLite
[MAILPOET-6185]
2024-08-22 13:28:09 +02:00
4b69005900 Use subquery in DELETE for SQLite
[MAILPOET-6185]
2024-08-22 13:28:09 +02:00
279364cf86 Avoid using information_schema for WP Playground 2024-08-22 13:28:09 +02:00
53919dd71b Add helper for detecting SQLite database engine
[MAILPOET-6185]
2024-08-22 13:28:09 +02:00
ad46417ee8 Add error handling logic for SQLite
[MAILPOET-6185]
2024-08-22 13:28:09 +02:00
a492658d48 Fix incorrect PHP version in comments
[MAILPOET-6195]
2024-08-21 19:23:28 +02:00
74b9d3788f Improve test for rollback to also check the outcome on the MyISAM engine
[MAILPOET-6195]
2024-08-21 19:23:28 +02:00
6b3592c4be Change default ordering in Automation analytics with subscribers
[MAILPOET-6174]
2024-08-21 15:15:21 +02:00
6b5fb2e92d Make all error messages translatable
[MAILPOET-6174]
2024-08-21 15:15:21 +02:00
50a00789b8 Add setting error message when email is missing
[MAILPOET-6174]
2024-08-21 15:15:21 +02:00
ecf0e1d2db Update error message in SendEmailAction
[MAILPOET-6174]
2024-08-21 15:15:21 +02:00
0761998eba Use typed properties in SendEmailAction
[MAILPOET-6174]
2024-08-21 15:15:21 +02:00
54043e5364 Update error messages in automations
[MAILPOET-6174]
2024-08-21 15:15:21 +02:00
2b2ee75288 Jump to version 5.0.0 2024-08-21 08:57:04 +03:00
38b5932c81 Release 4.59.0 2024-08-21 08:57:04 +03:00
a81163df71 Keep Typescript at 5.0.2
pnpm dedupe upated Typescript.
The update of Typescript is more complex. We also need to update the eslint
because there is a warning that TS version is not supported and
eslint-config-airbnb-typescript was abandoned so we need to remove it and
do some changes in eslint config for TS

[MAILPOET-6191]
2024-08-20 16:24:12 +02:00
1116b87eee pnpm dedupe
[MAILPOET-6191]
2024-08-20 16:24:12 +02:00
192725036d Update axios package
The package is a subdependency of @wordpress/scripts
I tried pnpm update axios but it didn't work.
I removed @wordpress/scripts and installed the same version again
and it updated the axios.
[MAILPOET-6191]
2024-08-20 16:24:12 +02:00
f31109d07c Update required pnpm manager version
I update pnpm because the required version is quite old and
some devs are using newer version anyways and mixing versions
causes strange changelogs in package-lock.yml

I ran corepack up but I removed the sha from the version
because the previous version didn't have it as well.
[MAILPOET-6191]
2024-08-20 16:24:12 +02:00
d16e1b69e7 Add timezone info to system report
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
bb7ab59ed5 Improve readability of scheduler code
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
07221d9c68 Get rid of unnecessary parameter in the Scheduler
The fromTimestamp parameter was used only in tests.
This commit replaces the parameter in tests by mocks and removes it.
 [MAILPOET-6142]
2024-08-19 15:29:42 +02:00
cb96086eb7 Rename methods for manipulating date in scheduling UI
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
6a4d3833c7 Get rid of unnecessary usages of .toISOString
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
54b800763b Replace usages of prefixed date methods with renamed variants
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
8c6136525e Remove unused date.ts methods and rename the prefixed methods
There is no use case for the methods without the translation to site's timezone.
When the input doesn't specify the timezone we treat it as utc.
When the input provides timezone (e.g. '2024-08-13 10:00+02:00' or new Date('2024-08-13 10:00+02:00'))
We respect the timezone of the input and print the result in the site's timezone.

When the site's timezone is set +01:00

'2024-08-13 10:00' prints as 2024-08-13 11:00
'2024-08-13 10:00:+02:00' prints as 2024-08-13 09:00
new Date('2024-08-13 10:00:+02:00') prints as 2024-08-13 09:00
new Date('2024-08-13 10:00:+00:00') prints as 2024-08-13 11:00

[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
9f32c59e49 Use DBAL Driver middleware to handle the correct connection timezone
I looked into using DBAL events for this but found that DBAL events
are deprecated so I went with middleware as they are recommended
as a replacement for the DBAL events.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
3ea44e45d4 Remove adjustForTimezoneDifference functionality
This is no longer used. It was used in just a couple of places
and was fixing a difference between PHP time zone and browser time.
We rely on WordPress to set PHP timezone to UTC and we use the site's
timezone on the client so the fix is no longer useful.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
f814624e0e Set GMT timezone to WPDB
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
506652bdc4 Fix scheduling post notifications
The user picks time in a select box, and we expect they pick a time
in the site's timezone so the saved cron expression is in the site's timezone.
When we calculate the next run date, we do it in the site's timezone and
to get UTC time, we convert it.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
797a446470 Fix values in list of times in scheduling form
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
ef5ee6d59a Fix times in task lists on Help > System Status
The time adjustments are not necessary because we rely on WP setting
timezone to UTC.
Manipulation in adjustTimezone difference was causing us to display GMT time.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
dac4eb82a4 Show proper time in listing for scheduled newsletter
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
73ffe485e7 Use isInFutureGmt to check future on send page
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
49ae4e5517 Show proper times for action scheduler info on help page
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
c6916431b0 Use proper time in scheduling calendar on send page
We add offset before we display time and we remove when we pass it to callback.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
e9acdbf9ad Replace simple usages of date formating with offet aware methods
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
0bc5f3acc8 Add formatFromGmt etc to MailPoet.Date
This set of function expects input in GMT and add site's offset
They are meant to be used for data coming from server in GMT
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
9fa6890606 Pass GMT offset from WordPress settings to JS
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
5fdba0e170 Replace current_time usage in tests
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
33f4b2d729 Replace usage of WP's current_time without gmt parameter in libs
This commit replaces usages by Carbon::now or in case we need a timestamp it
keeps current_time but adds the gtm parameter as true.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
9209a25199 Improve LastSubsribedAtListener to use fresh now
The cached now may cause the value to not be exact.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
83fb7f55ea Use UTC time in TimestampListener
$this->wp->currentTime('timestamp') adds 'gmt_offset' value.
This was needed with PDO connection because the connection
used @session.time_zone set to the same offset value.

[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
9f56ee67b7 Skip null ids when deleting WP list subscribers with invalid emails
Theoretically, we may end up running the delete query with a condition like
WHERE wp_user_id IN (null, null);
This is a tiny optimization to skip null IDs to avoid running such a query.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
c95cd1073b Improve SubscriberLifetieEmailCountTest to use saved entity
The test was using an empty entity which was not presisted. This may
potentially cause issues as in some places, an entity with a proper type might be expected.
It was already causing that an SQL query ran with WHERE type = null condition which is always false.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
ec0210cdab Rename $value to $row in WPDB/Result for better readability
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
7f1c606040 Reintroduce legacy DB table name constants for backward compatibility
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
d53fde4250 Cleanup unused Doctrine drivers and other files
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
569204b594 Remove PDO
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
4531ae9e60 Use WPDB driver for Doctrine
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
200ea47926 Use mysqli to run test cleanups
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
accdb64894 Split mutli-query into multiple statements
WPDB doesn't support multi queries.

[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
8c4b2cf3ef Replace deprecated Statement::bindParam() and Statement::exec() with params
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
240f15e22a Fix missing array key
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
fd72597e2c Fix last insert ID type check
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
c25d7d6b53 Use single quotes for strings in SQL queries
This is more standard SQL and required by WPDB.

[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
3b3ebb1cbd Pass SQLSTATE and code to query exceptions so they are converted to DBAL exceptions properly
The conversion is done by MailPoetVendor\Doctrine\DBAL\Driver\API\MySQL\ExceptionConverter
that is returned from MailPoetVendor\Doctrine\DBAL\Driver\AbstractMySQLDriver.

[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
c42c37e8b1 Implement parameter conversion and named parameters
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
53cad38099 Implement Statement and Connection::prepare()
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
dc66a6a349 Implement Result and Connection::query()
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
2047f0b694 Implement Connection::exec() and other simple connection methods
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
c17d8feaa4 Implement basic WPDB Doctrine driver with connection, statement, and result stubs
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
ff6a98fae1 Replace deprecated array types with Doctrine's ArrayParameterType
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
c7dc7e5a24 Replace PDO types with Doctrine's ParameterType
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
8473511bff Remove Paris, Idiorm, and Sudzy
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
805c752843 Remove all old models and their setup
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
0584c63180 Replace old model table name constants with Doctrine repositories
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00
437a4c414e Make sure the pQuery does not break html comments
We had the fix in the renderer, but we do use pQuery also in further processing of the rendered email
e.g. in code where we add GA tracking params to links.
In this commit, I moved the fix directly to the pQuery library so that it is safe to use
later in email code processing.
[MAILPOET-6190]
2024-08-19 13:14:12 +02:00
3214a86ee2 Add empty email check also for multisite registration
[MAILPOET-6188]
2024-08-16 09:35:45 +02:00
08ac80774c Add test for the registration class
[MAILPOET-6188]
2024-08-16 09:35:45 +02:00
a046d4ab6f Attempt to add a subscriber only when there is an email address
[MAILPOET-6188]
2024-08-16 09:35:45 +02:00
f022cc23fc Allow pingBridge endpoint for all users with access to the plugin admin
We call the endpoint on the admin pages and the restricted access was causing
that editor users were getting false error notices.
[MAILPOET-6189]
2024-08-14 11:54:28 +03:00
9feb0433e6 Show "from" value in logs when not explicitely set
It was empty before, and it looked like there are no logs. But they were just filtered for the last 7 days.

[MAILPOET-5670]
2024-08-14 10:26:54 +02:00
8ea0482ed8 Replace MailPoet.I18n.t with __() and _x()
[MAILPOET-5670]
2024-08-14 10:26:54 +02:00
4ce8ef48ab Add toggle button on MailPoet logs page
[MAILPOET-5670]
2024-08-14 10:26:54 +02:00
1722d383f9 Release 4.58.2 2024-08-13 15:23:15 +02:00
8ec7333a34 Track CAPTCHA setting to Mixpanel
[MAILPOET-6187]
2024-08-13 08:01:38 +02:00
172ffb7b61 Increase number of checks if the email was sent in automation
[MAILPOET-6175]
2024-08-12 16:11:19 +02:00
8868c98c25 Add test for CreateAutomationRunHookTest
[MAILPOET-6177]
2024-08-12 12:25:42 +02:00
2b38eb35ef Minimize the risk of race conditions for "once per subscriber" automations
[MAILPOET-6177]
2024-08-12 12:25:42 +02:00
e6e0d19a3a Update used Automate Woo plugin in Circle CI
- latest version: 6.0.31
 - previous version: 5.8.5
2024-08-12 09:27:45 +02:00
c5afaa9070 Fix flaky acceptance segment test
[MAILPOET-6141]
2024-08-09 11:12:31 +02:00
a2a30422a1 Fix twig generate cache error
[MAILPOET-6173]
2024-08-09 10:48:30 +02:00
5a7462a152 Delete max 10000 rows from scheduled task subscribers in cleanup.
DB may crash when deleting too many rows in one query.
The scheduled_task_subscribers has the potential to contain many records.
This commit adds limit when cleaning up inconsistent data from scheduled task subscribers.
[MAILPOET-6155]
2024-08-08 15:37:32 +02:00
4733bde082 Annotate types for PHPStan
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
12eabf26f2 Update Help API test
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
e646582942 Improve look of the data inconsistencies table
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
9b8af4cafd Add check for orphaned newsletter posts
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
45114e4da2 Add check for orphaned newsletter links
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
fe66e31b5f Add check for orphaned subscriptions
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
0d7898b3a5 Add inconsistency check and fix for sending queues without newsletter
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
cb4cea678a Show only inconsistencies that have at least one row
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
bbed9c35d2 Add check and cleanup for Orphaned sending task subscribers 2024-08-08 15:37:32 +02:00
34feae9f1f Delete also task subscribers when fixing orphaned scheduled tasks
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
c513befdb8 Add data inconsistency labels for humans
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
67a79728e2 Add fix button to data inconsistencies table
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
cb5f533e54 Add API for fixing inconsistent data
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
b68e6b7639 Add method for cleaning up orphaned sending tasks
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
08ffe6e3cf Refactor KeyValueTable to component to Typescript
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
85867d519e Print simple key-value table with data inconsistencies on help page
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
f10bce81a3 Pass data inconsistencies data to JS
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
54c21df3a6 Add backend classes for fetching inconsistent data
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
22ee156dcd Use inline property type hints for Help page
[MAILPOET-1587]
2024-08-08 15:37:32 +02:00
e1f38f3b83 Address offset issue in time comparison in AutomationEmailScheduler
[MAILPOET-6155]
2024-08-07 16:01:48 +02:00
0041a060b6 Improve check for recently scheduled tasks for sending action.
[MAILPOET-6155]
2024-08-07 16:01:48 +02:00
b2c7f49a41 Improve TimestampListener to use the current time for now instead of "cached" value
Using now "cached" on the TimestampListener instance was causing us to set createdAt and updatedAt slightly in the past.
It was potentially problematic in tests where the TimestampListener lives a long time or in long requests, such as a cron request.

[MAILPOET-6155]
2024-08-07 16:01:48 +02:00
8a0bd75cb1 Limit scheduled tasks fetching by automation run createdAt
This is a performance optimization to avoid fetching too many scheduled task rows.
Run is always created before the scheduled task which is created in send action step.
[MAILPOET-6155]
2024-08-07 16:01:48 +02:00
e5ab65f28e Fix send action checkSendingStatus to support multiple emails per subscriber.
It is possible that one email (e.g., purchase in category) is sent multiple times
to the same subscriber.

AutomationEmailScheduler::getScheduledTaskSubscriber was selecting the task based on subscriber and newsletter.
In the case of multiple emails sent to one subscriber, the method failed to pick ScheduledTaskSubsrciberEntity because
the query was fetching multiple results, but getOneOrNullResult expects only one result.

This commit fixes it by adding additional filtering by $runId to get the ScheduledTaskSubsriberEntity associated
with the correct run.

I did the filtering in PHP because an alternative would be using LIKE %% in the query. The meta column is text.
[MAILPOET-6155]
2024-08-07 16:01:48 +02:00
38b3fbe6fc Remove line-height from small variants of inputs
It was causing descender to be cut off. Removing it doesn't change the overall height of the input

[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
c62fbda4df Add tracking for opt-in position
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
6a155ec454 Update migration to only check for presence of the setting, without version check
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
e640fa10cb Add default value for opt-in position to Populator
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
13e45a960f Add migration so existing active installations remain opt-in checkbox position
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
588f942640 Test all combinations of opt-in checkbox positions on block and shortcode checkout with AutomateWoo
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
59733db6de Fix hiding AutomateWoo opt-in checkbox when MailPoet opt-in is in different position
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
60895570af Add acceptance tests for opt-in checkbox positions on shortcode checkout page
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
9698795c7a Improve AutomateWoo integartion tests by checking both block and shortcode checkout pages
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
0da59169b9 Improve opt-in message test by checking both block and shortcode checkout pages
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
9f42614f92 Differentiate between block and shortcode checkout in tests
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
aca259068a Allow setting opt-in message in tests
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
02a148ef84 Use proper hook based on opt-in position setting
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
334756d18f Change the condition to check if opt-in on checkout is enabled to be easier to read
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
1c9ebb960f Add opt-in position setting
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
1200565a7f Use __() for translations in checkout-optin setting
[MAILPOET-5807]
2024-08-07 15:43:42 +02:00
80a7d3c5d7 Trigger abandoned cart check on WP user login
[MAILPOET-6161]
2024-08-07 12:45:42 +02:00
1115771b50 Release 4.58.1 2024-08-06 15:42:02 +02:00
b61d7f7b22 Add default value for only-tests parameter
The default value in the compile:all command was missing, which caused an error.
[MAILPOET-6178]
2024-08-06 13:31:15 +02:00
c5c89c400a Add comment to Circle config
[MAILPOET-6159]
2024-08-06 10:17:36 +02:00
644a963b01 Update PHP script updating used WordPress
[MAILPOET-6159]
2024-08-06 10:17:36 +02:00
5c16babf7b Add closing notice on Settings page in acceptance tests
[MAILPOET-6159]
2024-08-06 10:17:36 +02:00
4e8b7b7f34 Add command updating WP database to docker-entrypoint.sh
[MAILPOET-6159]
2024-08-06 10:17:36 +02:00
f86687ae1c Use WordPress image with oldest PHP and install specific WP version
Because required WordPress version does not have official images we need to install specific version via CLI.
[MAILPOET-6159]
2024-08-06 10:17:36 +02:00
c8e6c02851 Fix "Return value must be of type int, null returned" in Action Scheduler wrappers
[MAILPOET-6179]
2024-08-05 20:35:32 +03:00
1a80227b03 Fix button width when parent column is smaller
[MAILPOET-5732]
2024-08-05 14:09:31 +02:00
61e596e9d2 Fix width of button wrapping table
[MAILPOET-5732]
2024-08-05 14:09:31 +02:00
3a2d18308b Update integration tests
[MAILPOET-5732]
2024-08-05 14:09:31 +02:00
557e73e4cc Wrap email button to table for compatibility with Outlook 2023
[MAILPOET-5732]
2024-08-05 14:09:31 +02:00
a664186108 Unify setting no-cache headers, use only relevant headers
See also: https://stackoverflow.com/questions/49547/how-do-we-control-web-page-caching-across-all-browsers

[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
ee6e22efa3 Regenerate CAPTCHA phrase using a custom request with cachebust to avoid caching
[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
758cb09a77 Check for audio file existence before sending headers
[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
975f42c56c Remove unnecessary check (it checks for image requirements, not audio)
[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
38f7d97283 Compress captcha audio files more aggressively
This reduces the size of the files combined from 224KB to 64KB.

The command used was:

for f in originals/*.mp3; do ffmpeg -i "$f" -c:a libmp3lame -af "highpass=f=200, lowpass=f=15000, afftdn=nf=-30, anlmdn=s=1, rubberband=pitch=1.05, volume=1.5" -b:a 8k -ac 1 -ar 8000 "${f##*/}"; done

[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
fad5e629af Simplify renderAudio and renderImage
[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
71d7f46718 Make captcha session stateless
[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
e8cf3d61ef Make captcha phrase stateless
[MAILPOET-6038]
2024-08-05 13:28:52 +02:00
10ef9ffce5 Initialize CAPTCHA session and phrase on page load
Previously, a new CAPTCHA phrase was generated when the CAPTCHA image
or audio was requested "again". For that, a counter needed to be stored in the
session, and since image and audio were fetched in parallel, any of them could
initialize the new CAPTCHA phrase. The problem appeared when they both
generated a new phrase at the same time. This resulted in a race condition,
where the image and audio had different CAPTCHA phrases and some users
weren't able to pass the CAPTCHA at all. This was occuring especially in Safari,
(maybe somehow due the type dectection range "preflight" request).

Now, the phrase is initialized on the CAPTCHA page load (and reloaded via AJAX),
so we don't need to store any additional metadata, apart from the phrase itself.

[MAILPOET-6038]x
2024-08-05 13:28:52 +02:00
3b0dd085bd Update Create an account label 2024-08-05 13:07:49 +02:00
784d7c1189 Move building Newsletter tests to their job
[MAILPOET-6178]
2024-08-05 12:31:08 +02:00
e2e1346649 Use skipping test in build all command
[MAILPOET-6178]
2024-08-05 12:31:08 +02:00
d12f88e80c Fix typo in filename, which prevents removing the file on case sensitive file systems
[MAILPOET-6172]
2024-08-02 12:03:45 +02:00
f2e048282a Reset terminal color
This caused that all output below this was in red color, even if it's unrelated to this script

[MAILPOET-6172]
2024-08-02 12:03:45 +02:00
e28faf837d Fix flaky ReceiveScheduledEmailCest test
[MAILPOET-6172]
2024-08-02 12:03:45 +02:00
d7330a1f65 Fix flaky ScheduleNewsletterCest test
[MAILPOET-6172]
2024-08-02 12:03:45 +02:00
83da3ada72 Fix typo causing all options to have the same key
Console Warning: Encountered two children with the same key, `option-8:00 am`.

[MAILPOET-6172]
2024-08-02 12:03:45 +02:00
b36b857891 Fix passing version to verify command
[MAILPOET-5678]
2024-08-02 08:58:56 +02:00
685b5f835c Use verify and delete zip in publish command
[MAILPOET-5678]
2024-08-02 08:58:56 +02:00
d9b524f08f Add new command verifying release zip
The command should verify containing the required version in the ZIP file.
[MAILPOET-5678]
2024-08-02 08:58:56 +02:00
e781843c6b Add new command for deleting old release zip
[MAILPOET-5678]
2024-08-02 08:58:56 +02:00
ccc922548b Rename test parameter from LATEST_BETA to WORDPRESS_VERSION
[PREMIUM-230]
2024-08-01 11:48:13 +03:00
a2f35526fa Remove forgotten calling debug function
[PREMIUM-230]
2024-08-01 11:48:13 +03:00
870008123c Make the test environment compatible with the premium plugin
[PREMIUM-230]
2024-08-01 11:48:13 +03:00
22584747a0 Move tests docker configuration
Because we want to unify tests environment in the premium plugin. This step should allow us to reuse it easier.
[PREMIUM-230]
2024-08-01 11:48:13 +03:00
6805d68ede Add label check-versions to link PRs with the job that created them
[MAILPOET-6171]
2024-07-31 12:28:20 +02:00
9c8aa381f0 Add info for local testing for check
[MAILPOET-6171]
2024-07-31 12:28:20 +02:00
d0be17e0d3 Force push changes to update existing PRs in Check Updates GH Workflow
[MAILPOET-6171]
2024-07-31 12:28:20 +02:00
0d14b58c91 Update PR title, label and content of PR with plugin and WP imaged updates
[MAILPOET-6171]
2024-07-31 12:28:20 +02:00
62ba5a4a1c Update used Automate Woo plugin in Circle CI
- latest version: 6.0.30
 - previous version: 5.8.5
2024-07-31 12:13:59 +02:00
71b2ee2ad6 Update used WooCommerce plugin in Circle CI
- latest version: 9.1.4
 - previous version: 9.0.2
2024-07-31 12:13:59 +02:00
ee976a13a7 Update used WordPress images in Circle CI
- latest version: 6.6.1-php8.3
 - previous version: 6.5.5-php8.1
2024-07-31 12:13:59 +02:00
b22c2d6b6f Release 4.58.0 2024-07-30 16:26:48 +02:00
7f1320258c Add migration to fix failed automation runs that should have been complete
[MAILPOET-6154]
2024-07-29 15:03:47 +02:00
7f27d5f850 Add test
[MAILPOET-6154]
2024-07-29 15:03:47 +02:00
2e13570dd7 Correctly complete automation run when there is an empty branch in if/else
[MAILPOET-6154]
2024-07-29 15:03:47 +02:00
63c19d2508 Always show Subscribers tabs in Analytics
[MAILPOET-6154]
2024-07-29 15:03:47 +02:00
682e3424ad Remove comments about deleting checks for BC support
We can't be sure that after a year, all customers will re-save the email.
To avoid future issues, we will keep the check in place.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
8c0af16cf5 Add support for heading font color to Woo transaction email renderer
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
24fb78a696 Add heading font color control to Woo email customizer
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
560b5f37e6 Improve test coverage for Woo emails renderer
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
78cf676f71 Remove unused CSS for main heading font size in Woo emails
This heading will from now on respect H1 font-size which default
value is 36px.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
3b53c69eb7 Refactor modifications of styles from Woo to an extra method
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
e3d60252a8 Render heading font family in Woo transactional emails
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
e5ca39b498 Add heading font family to Woo email customizer
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
6281e41243 Add Typography label and change label positioning in Styles panel
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
6d2dc2fbf8 Apply heading font sizes to Woo content in emails
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
dc2d66c42c Allow setting font sizes for headings in Woo customizer
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
2fcca5fcb9 Add a check to apply style fixes only after the email was re-saved
Some styles newly applied for the Woo Content blocks might
make the blocks look broken (e.g., too big font applied on the order items table).
This commit adds a check for existing emails, and for sites with existing customized the Woo email template
they are not applied unless a user saves the email in the editor.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
53ca386f7a Enforce a special heading color for the Woo email header
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
e62fca24dd Set font size for Woo content
This set font size for the WooContent block.
The font size is applied to elements that don't have an inlined font size.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
bb9b56a04d Enforce the same font family for headings in the Woo transaction email.
In the Woo email customizer, we have only one font family.
The newsletter data carry different default font families for headings.
In this commit, we enforce that the renderer uses the same font family
for text and headings.
This only applies to the part of the email that is handled by the MailPoet renderer.
The part that comes from the Woo itself is handled differently.
See previous commits.
I used clone to make sure we don't accidentally save the settings.
It wouldn't probably cause any damage because we don't expose these settings to users, but to be safe.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
fcb865a1e7 Unify headings in Woo Customizer to use branding color and global font
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
c3b3df325b Replaced inlined font-family definitions in email content from Woo
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
49ca792fc2 Use font family from Woo Customizer in Woo email styles
Woo has a stylesheet that is later inlined into the email content by Emogrifier.
In this commit I replace all font family declarations by the font family set
in the Woo customizer.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
5c3fdd9468 Apply style settings on Woo Blocks in the Woo Customizer
The font size was not applied at all, but Woo content comes with inlined font-family
styles so we need to use !important to override it.
[MAILPOET-4180]
2024-07-29 14:41:43 +02:00
14428c973c Revert "Keep text in square brackets in post notifications"
This reverts commit 14be775e74.
2024-07-29 15:36:07 +03:00
fd823efde8 Update sample run logs data structure
[PREMIUM-280]
2024-07-29 14:29:04 +02:00
d37cffd3ea Show time left for step in activity modal
[PREMIUM-280]
2024-07-29 14:29:04 +02:00
fe273284f4 Remove next step from activity modal
The previous assumption was, that a Delay action is not in mailpoet_automation_run_log database, and had to be calculated. But this was a wrong assumption, and since the action is there, we don't have to calculate it.

[PREMIUM-280]
2024-07-29 14:29:04 +02:00
b6653bac86 Show link to Scheduled Actions when the automation run is past due when it was suppose to run
[PREMIUM-280]
2024-07-29 14:29:04 +02:00
e3ad38e405 Properly close activity modal when there is an error in API
[PREMIUM-280]
2024-07-29 14:29:04 +02:00
7be9ade5f4 Prevent updating WordPress users data
[MAILPOET-6168]
2024-07-25 15:10:57 +02:00
2a10a5817b Add a test for non existing subsriber
[MAILPOET-6168]
2024-07-25 15:10:57 +02:00
2cdb12f712 Add Update Subscrber method to MP API
[MAILPOET-6168]
2024-07-25 15:10:57 +02:00
f471e332af Remove unnecessary circleci config re k6 2024-07-25 15:27:38 +03:00
077328c469 Fix flaky performance test and disable it from PRs
[MAILPOET-6157]
2024-07-25 15:27:38 +03:00
c05b45ac80 Replace deprecated prop
[MAILPOET-5184]
2024-07-25 08:39:13 +02:00
1f875ac14f Show automation action inserter popup in the bottom center position
This fixes position especially on mobile phones, but also on desktops < ~1050px

[MAILPOET-5184]
2024-07-25 08:39:13 +02:00
ed9e91e62a Fix automation action selector popup on small devices
[MAILPOET-5184]
2024-07-25 08:39:13 +02:00
c5c9b37198 Update test 2024-07-24 21:26:05 +02:00
4c91120654 Fix WooCheckoutBLocks test 2024-07-24 21:26:05 +02:00
0c000b0595 Fix deprecation warning from interact.js
[MAILPOET-6151]
2024-07-24 09:41:05 +02:00
4f72d7ee8c Release 4.57.0 2024-07-23 19:21:27 +03:00
6173077e4c Make 'At' lowercase
[MAILPOET-6158]
2024-07-23 09:01:34 +03:00
d4e239ace5 Declare tested up to 6.6
[PREMIUM-276]
2024-07-22 16:58:56 +03:00
0f37eb8ebf Allow formatting tags in post titles
[MAILPOET-5920]
2024-07-22 11:57:39 +02:00
4683a5f783 Fix typo. 'would' -> 'will'
[MAILPOET-6156]
2024-07-22 09:08:00 +03:00
36735e71f7 Fix flaky create segment test 2024-07-20 17:41:11 +02:00
9b3967e31e Add helper and fix flaky manage segments test 2024-07-20 17:41:11 +02:00
89b65adc30 Skip new email editor tests because it's not compatible with WP 6.6 yet 2024-07-19 17:41:09 +02:00
08a48c46ed Update used WooCommerce Subscriptions plugin in Circle CI
- latest version: 6.5.0
 - previous version: 6.4.1
2024-07-19 17:41:09 +02:00
dddf09d87b Update used WordPress images in Circle CI
- latest version: 6.6.0-php8.3
 - previous version: 6.5.5-php8.1
2024-07-19 17:41:09 +02:00
dec9a02ca4 Replace join query with a simple query
[MAILPOET-6148]
2024-07-19 15:03:35 +02:00
a9b7e5210c Add form placement options to readme.txt
[MAILPOET-6152]
2024-07-18 14:57:11 +02:00
d9edca0688 Improve condition in acceptance tests for WP 6.6
Because we run tests with release candidate versions, the condition didn't work as expected in those cases.
2024-07-17 16:35:00 +02:00
19b21fb2bf Improve TemplateImageLoader robustness
[MAILPOET-3923]
2024-07-17 16:03:19 +02:00
d82d6b89e9 Add test for external image loading
[MAILPOET-3923]
2024-07-17 16:03:19 +02:00
106c7d48f3 Add proxy to load external images for template thumbnails
[MAILPOET-3923]
2024-07-17 16:03:19 +02:00
2242d29e69 Release 4.56.0 2024-07-16 15:26:10 +02:00
934fd54278 Fix extraction of RC WordPress versions
[MAILPOET-6096]
2024-07-15 14:28:16 +02:00
268330f1a0 Disallow activating emails without list specified in listing
[MAILPOET-5352]
2024-07-15 14:04:12 +02:00
dbdb9b7ccc Show WooCommerce list on newsletters pages only when it makes sense
I found that we already have a logic for determining whether to show
Woo segment. It also covers case when there are Woo customers in the DB
but Woo plugin is not active.
This logic is used in segments listing API. I reused it also for fetching
lists on the newsletters page.
[MAILPOET-5224]
2024-07-15 13:51:13 +02:00
41d8bb3054 Unify properties declaration style in Newsletters.php
[MAILPOET-5224]
2024-07-15 13:51:13 +02:00
16525d5cce Fixed dragging images after being resized
[MAILPOET-6109]
2024-07-15 11:10:19 +02:00
c11460fd30 Prevent text selection when resizing
[MAILPOET-6109]
2024-07-15 11:10:19 +02:00
e4730f7e31 Prevent text selection when dragging
[MAILPOET-6109]
2024-07-15 11:10:19 +02:00
08f0f2bf38 Fix cloning dragged element
In new interact.js versions, you can no longer assign a clone to the element (it's read only). This is a workaround without doing a major refactor.

[MAILPOET-6109]
2024-07-15 11:10:19 +02:00
8c2f41dcf1 Fix calculating drop zone position
dragmove event is no longer present

[MAILPOET-6109]
2024-07-15 11:10:19 +02:00
5c349a506b Replace interact.js with interactjs
[MAILPOET-6109]
2024-07-15 11:10:19 +02:00
f0687b585d Check 500 error using exception 2024-07-15 11:01:48 +02:00
65f7f41f9f Add retry when downloading files from github 2024-07-15 11:01:48 +02:00
99a3cf2ea0 Remove obsolete property from docker compose 2024-07-15 11:01:48 +02:00
4b5d490e58 Update used Automate Woo plugin in Circle CI
- latest version: 6.0.29
 - previous version: 5.8.5
2024-07-15 09:59:55 +02:00
7864f99b3b Update used WooCommerce plugin in Circle CI
- latest version: 9.1.2
 - previous version: 9.0.2
2024-07-15 09:59:55 +02:00
06c3891eba Fix broken HPOS tests
We complete the actions in the database. However, we don't delete
the batch processes. Woo thinks those crashed. It tries to log an
error, but it doens't have suficient rights for that.
2024-07-12 10:05:39 +02:00
14be775e74 Keep text in square brackets in post notifications
[MAILPOET-5197]
2024-07-11 12:31:22 +02:00
b5eda778aa Update tests to be compatible with upcoming WP 6.6 2024-07-11 07:50:46 +02:00
6522654a9e Fix incorrect CSS import
This was causing that browser was trying to fetch the CSS file from
relative path from node modules and was getting 404.
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
cdd831d24d Set automation listing route basename to fix MailPoet logo link target
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
ac6bde4159 Improve navigation fallback to point to current page
This fixes click on logo e.g. on the Settings page.

[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
6057163b62 Revert "Fix tiny CSS glitches on segment editor page"
This reverts commit 65a44a947be6a134456271793183b5ad5f70d743.
2024-07-10 18:02:00 +02:00
b905ff1125 Fix MSS step in welcome wizard
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
80906c27f0 Fix newsletter listing routes
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
2534b58931 Fix welcome wizard router
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
ab50e3328e Fix routes in subscribers import
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
1699315a1d Fix default route in RoutedTabs
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
9e0ff7b99a Fix router for subscribers
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
9bd31fe2aa Fix useNavigate errors coming from Logo
Previously we used useHistory which wasn't throwing errors in case
it was used outside of router. It just returned undefined.
The undefined was causing errors being logged in console on admin pages
where we don't define onClick explicitly and where we don't use router.

useNavigate throws an error if it is not inside the router. In this commit, I added
handling of the error and default fallback that redirects to the homepage in cases where there is no router.
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
1bfe45fc10 Fix router in forms.jsx
Route must always be wrapped in Routes
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
7bcfe93269 Replace forgotten occurences of match.params with useParams hook
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
bb83d2ff1b Fix RoutedTabs for switch-only variant
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
a36d71850a Fix Routes and paths for newsletter listing
Paths don't support regexps any more https://reactrouter.com/en/main/upgrading/v5#note-on-route-path-patterns
[MAILPOE-3911]
2024-07-10 18:02:00 +02:00
6a4e81bd88 Remove nested HashRouter from dynamic segments list.tsx
This was causing: You cannot render a <Router> inside another <Router>. You should never have more than one in your app.
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
913bb7e50a Remove @types/react-router-dom
v6 is written in Typescript
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
cd3c6982da Fix tiny CSS glitches on segment editor page
This was causing small items like badges and values in multi selelect
to look broken.
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
feadef6c3c Update usage of Link components
See https://reactrouter.com/en/main/upgrading/v5#pass-link-state-as-separate-prop
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
d781b899c7 Delete unused component EventsConditions
This component seems to be a leftover after we removed automatic email.
It uses this.prop.history.push which is no longer available.

I was not able to find any usage of this component in the free or premium
plugin.
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
fc76b5608d Remove the rest of the usages of history.push
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
f54b9f590c Replace <Redirect> with <Navigate>
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
ca77a01d5c Replace useRouteMatch
The hook useRouteMatch was removed in react-router-dom v6
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
f917b4e885 Replace withRouter with react-router-dom hooks
withRouter was removed
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
0f5fbcf044 Replace useHistory which was removed from react-router-dom
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
530f62f021 Refactor Switch to Routes
See https://reactrouter.com/en/main/upgrading/v5#upgrade-all-switch-elements-to-routes
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
8810a734b5 Update react-router-dom package to v6
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
ce0901a237 Refactor redirects placed directly in <Switch>
This is per the second step in https://reactrouter.com/en/main/upgrading/v5
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
76cf3cfd75 Refactor Route render or component to children
This is per the first step in update guide https://reactrouter.com/en/main/upgrading/v5
[MAILPOET-3911]
2024-07-10 18:02:00 +02:00
c84910c075 Add test for switching active automation to draft
[MAILPOET-6131]
2024-07-10 12:56:52 +02:00
9be6895cf1 Simplify automation test helpers
[MAILPOET-6131]
2024-07-10 12:56:52 +02:00
b7cee657c7 When unscheduling automation run actions, cancel related runs
[MAILPOET-6131]
2024-07-10 12:56:52 +02:00
45592114bd Fix privacy policy links not being replaced if no privacy page exists
[MAILPOET-4504]
2024-07-10 12:27:20 +02:00
da93cc5237 Render sender domain notice together with other field errors
[MAILPOET-5270]
2024-07-09 17:09:41 +02:00
f3da8048c4 Expose sender domain notice component
[MAILPOET-5270]
2024-07-09 17:09:41 +02:00
63189e6b5d Move sender domain notice component up to components dir
[MAILPOET-5270]
2024-07-09 17:09:41 +02:00
b0c8d84c78 Ensure value is always number
https://github.com/mailpoet/mailpoet/security/code-scanning/13
2024-07-09 16:02:12 +02:00
1d0596f14f Update used WooCommerce Subscriptions plugin in Circle CI
- latest version: 6.4.1
 - previous version: 6.3.2
2024-07-09 13:28:25 +02:00
f490215ff2 Release 4.55.0 2024-07-09 13:12:56 +02:00
1c41fe81b1 Fix side effect in shortcodes test
[MAILPOET-5359]
2024-07-09 09:03:18 +02:00
b59e6fb683 Add instructions for running individual acceptance test in premium 2024-07-08 16:31:13 +02:00
0017e21523 Add Table of Contents in free plugin README
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
757582546d Simplify free plugin README + small improvements
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
3e40492caf Add section on translators comments
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
dc49f56c7f Add Table of Contents in README
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
c7cbece95c Better header structure in README
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
79ae36f4db Remove new template section - the link is 404
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
3912426190 Add examples how to run individual tests locally
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
f7b942ece6 Simplify SUPPORT
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
945680f643 Improve CONTRIBUTING
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
b6d8b86afd Remove issues section as it's irrelevant for external contributors
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
c87fc41a22 Remove IdiORM to Doctrine section as it's completed now
[MAILPOET-6136]
2024-07-08 16:31:13 +02:00
ce94e24fb1 Fix rendering of special characters using [site:name] shortcode
[MAILPOET-5359]
2024-07-08 14:45:41 +02:00
a4c6929e27 Fix type
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
a23d6e2609 Unify font-size and verically align activity modal header
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
cd424e9e58 Add detailed run logs sample data
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
964b391672 API now returns "Unknown step: $key" so fallback is not needed
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
0dffcc5ebd Update API endpoint response structure
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
ac751871f9 Unify automation endpoint 404 exceptions
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
8376494d6f Simplify managing state of runId URL parameter
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
9d964ab6e3 Rename "View subscribers activity" to "View subscriber activity"
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
131ecec452 Use tertiary button variant for bigger click area
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
b2853af8c7 Simplify code by removing ternary operator, which is not necessary, because logs is always an array
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
d18706d81f Return null when activity modal is hidden
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
61f992a823 Only render log status info when it's available
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
b725f7af17 More robust query building
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
9fa81e6887 Close modal on error (notice will be shown)
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
58a81a2f7a Make activity modal header white, so the text doesn't overlay when scrolling
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
ba79200f55 Show time left in activity modal for Delay action
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
abbabeef6a Show next step in activity modal
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
083b6bf8d6 Show step name instead of key in activity modal
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
0796b6d258 Show error message in activity modal
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
0d95963c15 Reduce flex-grow as it caused customer to be put on multiple lines
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
35995ce1be Show sample run logs when premium is not active and valid
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
785957731f Move RunData type to prevent cyclic dependency
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
83e8a828ac Use unified status badge
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
0c94994784 Update types for API response
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
302837724b Add footer to activity modal with run status
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
91aa10ac63 Show table of subscriber's run logs in modal
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
42bccf0a9a Add activity modal header with subscriber info
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
e833f34826 Fetch run data when URL parameter changes
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
a92f876b96 Add types for API response
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
8c612a7d82 Open activity modal when clicked on "View activity" button
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
79da5c5124 Add activity modal skeleton that reacts to "runId" URL parameter
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
d298ca40c4 Add new column to view subscriber's activity in automation analytics
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
10ed39ece3 Rename "View subscribers" to "View subscribers activity" in automation analytics
[MAILPOET-5436]
2024-07-08 14:37:30 +02:00
55d69869d7 Install react-codemirror
[MAILPOET-5483]
2024-07-08 14:29:08 +02:00
58c7ab526c Upgrade codemirror dependency
[MAILPOET-5483]
2024-07-08 14:29:08 +02:00
a0ada40c9f Use react code mirror
[MAILPOET-5483]
2024-07-08 14:29:08 +02:00
237e3988bf Fix flaky clicking segment action items 2024-07-04 09:14:56 +02:00
e52ffbc32c Don't show email stats for cancelled scheduled emails
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
22754ac717 Add tests for cancelling and rescheduling tasks, and check that it resumes sending queue
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
7f01d11a31 Add tests that it's not fetching deleted tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
8b7556a479 Add more tests for rescheduling tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
31821d05b5 Fix test
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
898e45b275 Show list of paused tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
9236c0ee6a Fix query builder for getting tasks by status
st.deletedAt line was ignored, because the "->where" on the next line replaced it. Resulting query was also wrongy built because of mixing of OR and AND conditions.

[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
d4e42eead7 Show total number of cancelled task on System Status page
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
7bacd887a9 Resume sending queue when rescheduling cancelled task
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
255122ebd3 Show that newsletter is cancelled when sending task is cancelled
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
73d302556e Use class names instead of hardcoded classes in tests
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
4af5720741 Refactor help endpoint
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
5253d79e81 Use types in new class properties
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
d0d6cb108f Limit the width of confirm modal in welcome wizard
[MAILPOET-6113]
2024-07-04 08:04:34 +02:00
fe5010110b Fix typo
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
6155053f91 Limit the width of confirm modal when cancelling/rescheduling tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
e2c6f61ecd Show "Cancel task" button on running tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
ef2101ef46 Allow running tasks to be cancelled
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
b8ca544596 Fix HelpTest integartion tests
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
2117d43d6b Add integration tests for Help API
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
5847918409 Return 400 instead of 404 in Help API
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
64ccf5b948 Add ScheduledTasksRepository integration tests for new cancelled status
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
3f6210c7ed Show date time in local (not server) timezone on Help > System Status page
Related to #5650

[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
4805e611e7 Add message for reschedule task confirmation
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
d60629a98c Add message for cancel task confirmation
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
9a46009568 Show error message in confirm modal
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
d71278a6bb Call API to cancel or reschedule task
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
abfbdb4e7d Show confirm modal when cancelling or rescheduling task
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
7d4a737fb6 Update TaskButton component to accept the whole task, not just ID
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
e8de391741 Replace MailPoet.I18n.t with __
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
88c0836443 Create endpoints to cancel and reschedule tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
65d347bf85 Refactor your-privacy to TypeScript
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
f2719f6716 Refactor queue-status to TypeScript
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
66e6de9be9 Refactor tasks-list to TypeScript
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
2dc036007e Refactor tasks-list-data-row to TypeScript
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
00824d82d3 Refactor tasks-list-labels-row to TypeScript
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
d38a63f0e6 Add column with (non-implemented) action to cancel or reschedule
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
4211e02d6a Show list of cancelled sending tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
1918d30fcd Add migration for a new cancelled_at column for scheduled tasks
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
e55a861137 Show subscriber email if a sending task has only a single subscriber
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
5f4d4c59fd Increase number of tasks to 20 on Help > System Status
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
599ecd6323 Remove "type" column in Help > System Status as all tasks are with "sending" type
[MAILPOET-5755]
2024-07-04 08:04:34 +02:00
703bd75578 Fix datepicker header on pages with border-box applied to all elements
[MAILPOET-6140]
2024-07-02 18:22:25 +02:00
610f903f07 Release 4.54.0 2024-07-02 17:22:04 +03:00
83c6e94073 Fix destructuring assignment
Introduced in a351437

[MAILPOET-6138]
2024-07-02 11:34:41 +02:00
3ff825ffca Fix subscriber verification to allow sending all transactional emails
[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
a24922a0d2 Use SubscriberEntity constants in tests
[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
db62990c0c Make Legacy Abandoned Cart emails transactional
[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
3ce6a83789 Test legacy emails are transactional
[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
fd0d1036e6 Add isTransactional method to NewsletterEntity
[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
2cba628c29 Do not check subscriber status during abandoned cart scheduling
The abandoned cart automation allows for transactional abandoned carts. Therefore we should not check for the subscriber status when initalizing the abandoned cart mechanism

[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
18852e8ea4 Test abandoned cart gets scheduled regardless of subscriber status
[MAILPOET-6115]
2024-07-01 13:01:30 +02:00
21672efd3d Fix automation icons, that are wrapped in <div> (like if/else)
[MAILPOET-6132]
2024-07-01 10:24:30 +02:00
57ef2c83dc Make icons bigger in automation subscribers analytics
[MAILPOET-6132]
2024-07-01 10:24:30 +02:00
f2fddf43ee Make icons bigger in automation editor steps
[MAILPOET-6132]
2024-07-01 10:24:30 +02:00
a292ded28e Make icons bigger in automation editor block popup without scaling
Scaling can make icons blurred in some browsers.

[MAILPOET-6132]
2024-07-01 10:24:30 +02:00
baf8639de5 Normalize automation icon sizes
[MAILPOET-6132]
2024-07-01 10:24:30 +02:00
62b9223d2b Remove hardcoded sizes and scales from automation icons
[MAILPOET-6132]
2024-07-01 10:24:30 +02:00
55e1ff7d8f Fix fatal error when trying to create a new segment with option subscribed date
MAILPOET-6133
2024-06-28 17:41:42 +02:00
788112cbfc Fix condition for checking that the latest version is beta or RC
[MAILPOET-6096]
2024-06-28 17:36:36 +02:00
5f3b94381a Remove no longer needed packages
[MAILPOET-5491]
2024-06-28 16:11:07 +02:00
924b01d85c Remove no longer supported import syntax, use CommonJS for tests instead
Using inject-loader requires first transpiling modules to CommonJS. Previously,
we were doing this via parametrized imports, but these are no longer supported.
Instead, we can fix this by using CommonJS preset in Webpack config.

[MAILPOET-5491]
2024-06-28 16:11:07 +02:00
4ed5ce2ba3 Update babel-loader to 9.1.3
[MAILPOET-5491]
2024-06-28 16:11:07 +02:00
605664228e Improve code readability
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
242c29398d Keep the latest changelog in both readme and changelog files
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
0fac09172a Fix formating of readme file
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
e023501c31 Fix a typo in method name
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
7abfa53c2f Copy changeset on release
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
79285f3127 Retain the latest version in readme
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
f9a91649ed Move changelog to a new file
[MAILPOET-6119]
2024-06-28 14:27:21 +02:00
401751c576 Remove config for exposing storybook's port
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
f60819a741 Handle TS errors after uninstalling Storybook
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
261b50fe38 Remove Storybook from configs
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
42d9ad5b4a Remove Storybook mentions from readme.md
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
0593244476 Remove main storybook files
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
445085d25d Pnpm dedupe
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
0fa4f62aeb Remove storybook commands
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
2291999baa Remove storybook npm packages
[MAILPOET-6110]
2024-06-28 12:56:38 +02:00
40990042bf Move <OrderStatus> under MailPoet integration
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
9b085b4863 Unify status badges in Automations - use <AutomationRunStatus>
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
458fd79fe1 Unify status badges in Automations - use <StatusBadge> for email stats
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
8bc1cfc959 Unify status badges in Automations - use <OrderStatus>
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
19443d33b8 Unify status badges in Automations - use <AutomationStatus>
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
0bddd56879 Unify status badges in Automations - create new status components
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
e6a816584b Unify status badges in Automations - clean up styles
[MAILPOET-6135]
2024-06-28 11:04:53 +02:00
b91e33bfb6 Update k6 and selector for automation test
[MAILPOET-6134]
2024-06-27 15:31:44 +03:00
07cd37a8ff Use WordPress image with PHP 8.1 instead of 8.2
[MAILPOET-6097]
2024-06-27 11:17:19 +01:00
8570a17228 Increase count of fetching pages with WordPress iamges
[MAILPOET-6097]
2024-06-27 11:17:19 +01:00
b8cd7b80d0 Allow using RC versions as beta
[MAILPOET-6096]
2024-06-27 10:42:11 +02:00
1660df325e Move checking beta versions before pulling docker images
[MAILPOET-6096]
2024-06-27 10:42:11 +02:00
9a0bd94b6f Add integration and acceptance tests using WooCommerce beta
[MAILPOET-6096]
2024-06-27 10:42:11 +02:00
55194bc9c8 Add integration tests using WordPress beta
[MAILPOET-6096]
2024-06-27 10:42:11 +02:00
f58959e760 Add acceptance tests using WordPress beta
The job runs only if the last version from WordPress feeds is beta
[MAILPOET-6096]
2024-06-27 10:42:11 +02:00
7d80cda7aa Fix pnpm lock file
MAILPOET-5121
2024-06-27 09:04:25 +02:00
8ccdcb56c2 Patch invalid JS imports in @woocommerce/components
This fixes an error with the following:
1. CurrencyFactory patch

```js
import { CurrencyFactory } from '@woocommerce/currency';
```
instead of
```js
import CurrencyFactory from '@woocommerce/currency';
```

2. Error with TextComponent from `@wordpress/components`

Fixed with pnpm patch

MAILPOET-5121
2024-06-27 09:04:25 +02:00
b721cdf414 Patch invalid css in @woocommerce/components
The current version throws an error:
This function isn't allowed in plain CSS
color: darken(#cacccd)

Fixed with pnpm patch

MAILPOET-5121
2024-06-27 09:04:25 +02:00
5c39b5de8f Update @woocommerce/components to version 12.3.0
MAILPOET-5121
2024-06-27 09:04:25 +02:00
08178ce2fd Remove the old @woocommerce/components pnpm patch
MAILPOET-5121
2024-06-27 09:04:25 +02:00
e9e837ea8a Fix stylelint warningns
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
bbc2374a44 Update stylelint to v 16
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
120f2e1cda Fix warnings after stylelint update
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
b12887c07c Update stylelint package
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
45335e8260 Remove already updated packages from ignore list in the update command
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
871c161cb3 Update react-string-replace package
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
075aa016e5 Fix TS error for a react-string-replace argument in mailer-error.tsx
[MAILPOET-5490]
2024-06-27 08:44:03 +02:00
3730033986 Update used Automate Woo plugin in Circle CI
- latest version: 6.0.27
 - previous version: 5.8.5
2024-06-26 18:09:50 +02:00
66ff27405e Update used WooCommerce plugin in Circle CI
- latest version: 9.0.2
 - previous version: 8.9.3
2024-06-26 18:09:50 +02:00
3c8b5ba6a2 Update used WordPress images in Circle CI
- latest version: 6.5.5-php8.3
 - previous version: 6.4.3-php8.2
2024-06-26 18:09:50 +02:00
4c163d2cd4 Fix fetching versions
We have an issue when previous version of the plugin was not on the first page. This commit adds while loop to avoid this issue.
[MAILPOET-6097]
2024-06-26 14:42:26 +02:00
808f4cf1f8 Remove outdated hacks. WP.Org now supports PHP 8.1
MAILPOET-3901
2024-06-26 12:35:50 +02:00
395a22c0ee Revert unintentional updates done to other packages
MAILPOET-3901
2024-06-26 12:35:50 +02:00
b81a9837c4 Update composer.json file. Remove php72 and added php81 polyfill
MAILPOET-3901
2024-06-26 12:35:50 +02:00
bf1b7a2219 Update CircleCI config for WP.org lint
WP.org now supports PHP 8.1
https://meta.trac.wordpress.org/ticket/3791#comment:44

MAILPOET-3901
2024-06-26 12:35:50 +02:00
ef5d11748d Fix Scoper (prefixer) adding MailPoetVendor namespace when it wasn't required
MAILPOET-3901
2024-06-26 12:35:50 +02:00
fe5c02aff0 Update symfony polyfill packages
MAILPOET-3901
2024-06-26 12:35:50 +02:00
09036b1e01 Remove symfony/polyfill-php72 as it’s no longer needed
MAILPOET-3901
2024-06-26 12:35:50 +02:00
e51c20221a Only clear action if deactivating an automation
[MAILPOET-5982]
2024-06-26 11:22:45 +02:00
4b14ae26cb Use a constant instead of string
[MAILPOET-5982]
2024-06-26 11:22:45 +02:00
1f8edf666a Deactivate automations runs when deactivating automation
[MAILPOET-5982]
2024-06-26 11:22:45 +02:00
a7012e44cc Trigger "tag added" automation when tag is added via form
[MAILPOET-6128]
2024-06-26 09:42:13 +02:00
f242d4bb5f Update acceptance test for new version of TinyMCE
TinyMCE now forces hex colors by default
See https://www.tiny.cloud/docs/tinymce/latest/migration-from-6x/#force-hex-color
[MAILPOET-5988]
2024-06-25 16:10:54 +02:00
2a8b6ad58d Update CSS to match the expected look of the TinyMCE toolbar
Border and radius were causing dual borders.
Buttons were, by default, white and didn't match the toolbar background.
[MAILPOET-5988]
2024-06-25 16:10:54 +02:00
e5373286fe Update TinyMCE package
[MAILPOET-5988]
2024-06-25 16:10:54 +02:00
873a8be8bc Add licence_key configure option
By providing this option value 'gpl' we declare our intention
to use TinyMCE under GPLv2+ license.
Our plugin uses the GPL so we are fine.
[MAILOPET-5988]
2024-06-25 16:10:54 +02:00
95754df815 Update tinyMce loader config to cover new cases of global tinymce
[MAILPOET-5988]
2024-06-25 16:10:54 +02:00
7914bbef3b Refactor for placement selection to the grid
[MAILPOET-6127]
2024-06-25 15:08:47 +02:00
9451f4545a Fix form placement appearance when scrollbars are active
[MAILPOET-6127]
2024-06-25 15:08:47 +02:00
12fcbb10c9 Fix subscribers count tooltip overlay with recalculate button
[MAILPOET-6121]
2024-06-25 11:59:12 +02:00
61dedcabda Release 4.53.0 2024-06-25 10:53:14 +01:00
68d007123e Fix Archive page shortcode tooltip not working due to missing "name" attribute
[MAILPOET-6122]
2024-06-25 11:24:44 +02:00
39849a61f1 Use default sizes for captcha image in case invalid value is passed
[MAILPOET-6112]
2024-06-24 15:19:43 +02:00
d2b5932ba7 Add global objects that react tooltip uses
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
cbb3acbad2 Update react tooltip package
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
bfcb5940cb Rename data-for to data-tooltip-id
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
91b2bada15 Ensure tooltip ID is always set
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
40dd9bb554 Use the new tooltip in the legacy code
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
ec2b077eb3 Move border values to CSS in tooltip
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
a8e7bff850 Move styling values to CSS in tooltip
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
64ba6cb520 Remove multiline from tooltip it's supported by default
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
d00d72ea14 Update react tooltip imports
[MAILPOET-5482]
2024-06-24 14:51:41 +02:00
9f8fdfb85f Add scheduling to the GitHub action updating used versions
[MAILPOET-6097]
2024-06-24 13:30:05 +02:00
394aa30315 Update composer version
MAILPOET-6118
2024-06-24 10:57:09 +02:00
eb95edb938 Update used WooCommerce Subscriptions plugin in Circle CI
- latest version: 6.4.0
 - previous version: 6.3.2
2024-06-24 10:10:51 +02:00
d6e903a766 Update used Automate Woo plugin in Circle CI
- latest version: 6.0.26
 - previous version: 5.8.5
2024-06-24 10:10:51 +02:00
74960ce918 Update used WooCommerce plugin in Circle CI
- latest version: 9.0.1
 - previous version: 8.9.3
2024-06-24 10:10:51 +02:00
436b00a03a Update used WordPress images in Circle CI
- latest version: 6.5.4-php8.3
 - previous version: 6.4.3-php8.1
2024-06-24 10:10:51 +02:00
5791dafc3e Fix commit messages generated by GH action
[MAILPOET-6097]
2024-06-21 19:26:56 +02:00
f4adfaf732 Fix getting version from temporary files in GH action
[MAILPOET-6097]
2024-06-21 19:08:09 +02:00
46ad169439 Remove defaultProps from listing.jsx
[MAILPOET-6008]
2024-06-21 16:36:06 +02:00
7ffe562d70 Remove defaultProps from form-settings/selection.jsx
[MAILPOET-6008]
2024-06-21 16:36:06 +02:00
f2d7dc0321 Remove defaultProps from form.jsx
[MAILPOET-6008]
2024-06-21 16:36:06 +02:00
a3514377c8 Move default props to default parameters - simple cases
React throws a deprecation warning for defaultProps.
This commit refactors default props to default values in easy-to-fix cases.

[MAILPOET-6108]
2024-06-21 16:36:06 +02:00
b19c30d203 Fix compilation errors after upgrading react
[MAILPOET-6008]
2024-06-21 16:36:06 +02:00
58865ef3f5 Update react, react-dom and react types
[MAILPOET-6008]
2024-06-21 16:36:06 +02:00
932406c288 Update title for created pull request via GH action
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
0d794b3b2f Add type declarations to function in GH Action update scripts
This commit also fixes some bugs with function redeclaration and missing parameters.
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
3989594a56 Add used plugin versions to the commit messages
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
18dc3daa78 Extract replacing versions for a private plugin to a function
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
3898b3dccb Update script getting WooCommerce versions and store them to file
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
0b157c3ac9 Use exact version instead of latest
To unify with other plugins I decided to use the exact version number.
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
318424f0c4 Add used WordPress versions to the commit message
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
8e3f7faa0e Rename file containing update workflow
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
8e1abcedbd Add step creating pull-request
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
62b0a55805 Change branch name for the pushed changes
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
2e460d9b0b Move env variable definition to the correct step
[MAILPOET-6097]
2024-06-21 15:59:53 +02:00
d68280a4a1 Add initialTab parameter to the links redirecting to the automation templates
[MAILPOET-5848]
2024-06-21 14:53:05 +02:00
8761fd8f3f Add support for selected initial tab on automation templates page
[MAILPOET-5848]
2024-06-21 14:53:05 +02:00
428b40ac65 Fix acceptance test with abandoned cart
We cannot use the common method for newsletter page verification, because the email editor does not contain subject input.
[MAILPOET-5848]
2024-06-21 14:53:05 +02:00
e285349e1f Update integration test for HomePage
[MAILPOET-5848]
2024-06-21 14:53:05 +02:00
fe25ce4857 Update condition for abandoned cart emails on homepage
[MAILPOET-5848]
2024-06-21 14:53:05 +02:00
b8d03f012b Update link for the abandoned cart setup on homepage
[MAILPOET-5847]
2024-06-21 14:53:05 +02:00
1d77461b5d Update ws package
Fix for https://github.com/mailpoet/mailpoet/security/dependabot/103
and https://github.com/mailpoet/mailpoet/security/dependabot/102
2024-06-20 15:26:52 +02:00
b3b686d8bf Ensure not loaded Mixpanel is not blocking UI
[MAILPOET-6116]
2024-06-20 14:06:20 +02:00
638fb7e56a Simplify and speed up notification history search test
[MAILPOET-6072]
2024-06-20 13:31:46 +02:00
d8fca6c46f Add integration test for searching post notifications by subject
[MAILPOET-6072]
2024-06-20 13:31:46 +02:00
9b082f7ffa Update Test helper method name for better clarification
MAILPOET-6072
2024-06-20 13:31:46 +02:00
1e049018d4 Test for both static and dynamic Newsletter subject
MAILPOET-6072
2024-06-20 13:31:46 +02:00
4c21a25774 Add tests for feature and switch to leftJoin instead of InnerJoin because we always want to return Newsletter records when available
MAILPOET-6072
2024-06-20 13:31:46 +02:00
5789a61075 Update ListingRepository::applySearch abstract function to reflect new updates
MAILPOET-6072
2024-06-20 13:31:46 +02:00
ae275d0824 Fix post-notification history subject search
We previously were looking for search term on the Newsletter table subject column. Unfortunately, post-notification and its history items sometimes contain both static text and dynamic text i.e., MailPoet shortcodes. This prevented the search from returning any useful results.

 The RenderedSubject on the Sending queues table includes both the static text and dynamic text, so we can look for the search term on it

MAILPOET-6072
2024-06-20 13:31:46 +02:00
aea6eb3dbb Unify how an automation email type is detected
This fixes an issue when an automation transactional email showed wrong header in email editor.

[MAILPOET-6114]
2024-06-19 17:44:29 +03:00
93f0eb9604 Add new black and white social icon variants to config
[MAILPOET-5805]
2024-06-19 13:52:31 +02:00
15513ad1dd Add new black social icons variant based on grey
[MAILPOET-5805]
2024-06-19 13:52:31 +02:00
8e9a74b132 Add new white social icons variant based on grey
[MAILPOET-5805]
2024-06-19 13:52:31 +02:00
25feb4cccc Remove Google+ icon links from config
[MAILPOET-5805]
2024-06-19 13:52:31 +02:00
c3968e7cad Don't show "authorize now" message when email field is empty
[MAILPOET-6111]
2024-06-19 11:14:45 +01:00
a55725838d Update list of dependencies skipped by the update script
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
03b50bd2f5 Add mock for @woocommerce/settings module
Previously this module was mocked as an empty module, but
after updating @woocommerce/currency we need to provide at
least getSetting function.

The function is called only once with the parameter 'currency'.

I tried installing the full @woocommerce/settings, but it requires
complex initialization (e.g. passing some data from PHP). I find it
better to provide this simple mock and throw an error if it is used more than expected.
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
836772b5bb Pnpm dedupe
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
b83a2188e0 Remove deprecated @babel/plugin-proposal-nullish-coalescing-operator
It was replaced by @babel/plugin-transform-nullish-coalescing-operator
and it is already part of  @babel/preset-env
https://babeljs.io/docs/babel-plugin-transform-nullish-coalescing-operator

[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
922dd93961 Remove deprecated @babel/plugin-proposal-class-properties
It was replaced by @babel/plugin-transform-class-properties
Which is already part of  @babel/preset-env
See https://babeljs.io/docs/babel-plugin-transform-class-properties
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
1d32461b3d Workaround for the issue with chai v5 and ES modules
I couldn't make it work with the Babel loader. There is a possible
solution using ts-node as a loader. I didn't want to install another
package, so I chose a different workaround.
mocha-env.mjs is processed as a module thanks to the suffix, and it
sets chai. expect globally, and then I updated tests to use the global expect.

Please see https://github.com/chaijs/chai/issues/1568
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
73434e1ef7 Workaround for legacy newsletter editor tests after updating chai
Chain newly has to be imported as module and doesn't support CommonJs
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
ca8f6c64d6 Copy buildLocalizeFn into the place of usage
After 3.0.0 the date-fn's package.json contains 'exports' propperty
which prevents us from including the buildLocalizeFn function via direct import form it's file.
Because everything that is not listed in 'exports' throws ModuleNotFound error.
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
bde68b868d Update @babel/preset-env from 7.16.11 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
fd8fd8560e Update url from 0.11.1 to 0.11.3
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
706bf3cf2a Update storybook-addon-performance from 0.17.1 to 0.17.3
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
89948771ad Update stylelint-scss from 5.1.0 to 6.3.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
e5a27dc466 Update sinon from 15.2.0 to 18.0.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
9e102c0eef Update react-datepicker from 4.16.0 to 6.9.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
24b0f1ba09 Update postcss-cli from 10.1.0 to 11.0.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
5eaa16c286 Update jsdom from 22.1.0 to 24.1.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
556c0d479b Update imports-loader from 4.0.1 to 5.0.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
9d349dad84 Update husky from 8.0.3 to 9.0.11
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
ccaaea40c4 Update expose-loader from 4.1.0 to 5.0.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
1417bd87d5 Update exports-loader from 4.0.0 to 5.0.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
be369a87ac Update date-fns from 2.30.0 to 3.6.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
39d34ac14a Update copy-webpack-plugin from 11.0.0 to 12.0.2
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
4bdfb91480 Update chai from 4.3.8 to 5.1.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
7aab32cdf3 Update @storybook/react from 7.3.2 to 8.1.8
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
4010c196ce Update @storybook/builder-webpack5 from 7.3.2 to 8.1.8
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
d974f55068 Update @storybook/addon-storysource from 7.3.2 to 8.1.8
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
896962c7d1 Update @storybook/addon-links from 7.3.2 to 8.1.8
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
ca0d1cf95a Update @storybook/addon-actions from 7.3.2 to 8.1.8
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
22d7722bce Update wp-types from 3.62.4 to 3.65.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
f2dd6bdf2c Update webpack from 5.88.2 to 5.92.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
2eed2a7eb0 Update ts-loader from 9.4.4 to 9.5.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
2b98b79414 Update sass from 1.66.1 to 1.77.5
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
846f2d042e Update react-select from 5.7.4 to 5.8.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
90407a1791 Update react-dom from 18.2.0 to 18.3.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
8e14bceb88 Update react from 18.2.0 to 18.3.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
f15b0bc3a2 Update moment from 2.29.4 to 2.30.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
5c25f2c0b8 Update mocha from 10.2.0 to 10.4.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
2326197214 Update eslint-plugin-check-file from 2.6.2 to 2.8.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
e22bf254be Update core-js from 3.32.1 to 3.37.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
213a426c02 Update classnames from 2.3.2 to 2.5.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
5bfef4e765 Update browserslist from 4.21.10 to 4.23.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
0c05b36976 Update @woocommerce/date from 4.2.0 to 4.3.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
82ff431304 Update @woocommerce/currency from 4.2.0 to 4.3.0
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
a69eb0245b Update @storybook/addons from 7.3.2 to 7.6.17
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
06e330dd41 Update @babel/runtime-corejs3 from 7.22.11 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
1d44bd7cc6 Update @babel/runtime from 7.22.11 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
13929a841c Update @babel/register from 7.22.5 to 7.24.6
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
03b9a5665c Update @babel/preset-typescript from 7.22.11 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
e37517ed52 Update @babel/preset-react from 7.22.5 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
3551604d13 Update @babel/plugin-transform-runtime from 7.22.10 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
87eefbf9b6 Update @babel/plugin-transform-modules-commonjs from 7.22.11 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
a0fe80c313 Update @babel/plugin-proposal-throw-expressions from 7.22.5 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
72fba9e62b Update @babel/plugin-proposal-function-sent from 7.22.5 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
156bc6a487 Update @babel/core from 7.22.11 to 7.24.7
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
48d93f491d Update terser-webpack-plugin from 5.3.9 to 5.3.10
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
d98cab77c9 Update stylelint-order from 6.0.3 to 6.0.4
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
90ea3c3e36 Update postcss-scss from 4.0.7 to 4.0.9
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
ba191eec1d Update postcss from 8.4.31 to 8.4.38
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
91dd02f54a Update jquery from 3.7.0 to 3.7.1
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
b04130b75b Update autoprefixer from 10.4.15 to 10.4.19
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
8c424c343a Update @emotion/styled from 11.11.0 to 11.11.5
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
85bc690c1e Update @emotion/react from 11.11.1 to 11.11.4
[MAILPOET-6008]
2024-06-19 12:12:59 +02:00
4c2ac47d6d Fix live preview when changing button font size in form editor
[MAILPOET-5655]
2024-06-19 11:44:27 +02:00
985946549e Use the correct WP image version for the oldest acceptance job
[MAILPOET-6097]
2024-06-19 09:17:18 +02:00
8a0413dcbe Add missing env variable for two update steps in GH action
[MAILPOET-6097]
2024-06-18 19:33:49 +02:00
379b30e179 Use a newer version of GH checkout actions
[MAILPOET-6097]
2024-06-18 19:33:49 +02:00
dac241a939 Improve update workflow by pushing once at the end
[MAILPOET-6097]
2024-06-18 18:26:01 +02:00
8919902221 Use token from a different secret
[MAILPOET-6097]
2024-06-18 18:26:01 +02:00
92fdefda91 Add checking that a related versions were found
[MAILPOET-6097]
2024-06-18 18:26:01 +02:00
c72c876fb3 Use already configured token
We have already set existing GH token in the repository settings, so we can reuse it as well.
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
c766c781c4 Update used latest WooCommerce Memberships plugin
We were using older Memberships plugin version which caused throwing deprecated errors.
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
aa78d184d4 Use all updating scripts
We need to use all scripts and also use different IDs.
Some scripts also need to use token stored in GH secrets.
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
cd23be1e45 Add script updating used WC Subscriptions
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
4ae48e185f Add script updating used Automate Woo
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
57ebc876ab Add script updating used WC Memberships
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
aed63c7cd3 Create file with helper functions
To avoid code repetition I created a file,
which contains function that can be reused.
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
dd4bd67ed2 Add new GitHub action updating used WooCommerce plugin
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
be31c51379 Add new GitHub action for using newer WP image
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
69ea1a84ac Use official WP docker images in acceptance and integration tests
[MAILPOET-6097]
2024-06-18 16:31:15 +02:00
d8fdde90fe Release 4.52.0 2024-06-18 13:37:56 +02:00
710f22c94b Fix condition to capture all Woo list opt-outs 2024-06-17 13:15:42 +02:00
c20c569b35 Make isWooCommerceSubscribed() private 2024-06-17 13:15:42 +02:00
622357b40b Fix test assertion 2024-06-17 13:15:42 +02:00
e536c68289 Verify segment 2024-06-17 13:15:42 +02:00
becf40b2cb Tweak tests 2024-06-17 13:15:42 +02:00
e3b1a87f34 Sync AutomateWoo Opt-In when Subscribe event happens. 2024-06-17 13:15:42 +02:00
eeb59da01e Show the error message instead of loading spinner when there is an API error
MAILPOET-6037
2024-06-17 13:14:40 +02:00
d2084eced0 Make diff text bold, fix wrapping
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
7ff763c2d6 Add domain status badge
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
94b7fa9d9f Add domain error banner
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
e5d6e480a2 Style error message and diffs
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
cb35777716 Use @wordpress/components button and tooltip instead of custom ones
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
375c2515c1 Use @wordpress/components button and spinner instead of custom ones
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
0ce6826ab6 Use @wordpress/components modal instead of a custom one
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
c0a819f3bd Add steps to manage sender domain view, update texts and visuals
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
f7172e9186 Remove status column
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
0c22654c90 Display detailed DNS issues in domain authentication
[MAILPOET-6037]
2024-06-17 13:14:40 +02:00
e1b681043b Fix calculating time zone difference and add comments with explanations
[MAILPOET-5495]
2024-06-17 12:51:16 +02:00
64417c7bc8 Expose server_timezone_in_minutes on all MailPoet pages, not just Emails
[MAILPOET-5495]
2024-06-17 12:51:16 +02:00
f34e70f601 Adjust newsletter sending time with timezone difference between server and client on emails listing page
[MAILPOET-5495]
2024-06-17 12:51:16 +02:00
6e1462d4f4 Create function to adjust for timezone difference between server and the client
[MAILPOET-5495]
2024-06-17 12:51:16 +02:00
da190c5d06 Calculate server timezone offset in minutes
[MAILPOET-5495]
2024-06-17 12:51:16 +02:00
abbc4417ed Revert removing doctrine fix for plugin repository
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
e998e1f28f Add a comment why we need to remove the colon character
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
fb7ccbd8b9 Add missing handling database server timeout
Because we updated form Doctrine DBAL 2 to DBAL 3 we need to use a different handling for database server timeouts.
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
674b9cbcb2 Update composer package doctrine/orm
The used version is limited by the doctrine/lexer used by symfony/validator
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
26a98f1000 Update composer package doctrine/dbal
We cannot update to the latest version of the dbal 3 because there is a another package conflict.
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
487f1490b0 Update composer package doctrine/orm
The used version is limited by the package dependencies which can cause incompatibility on WP.org SVN.
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
90a4f8e591 Update composer package doctrine/common
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
d992ffc0e4 Update composer package doctrine/annotations
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
635e382cea Update composer packages symfony/validator and symfony/dependency-injection
Integration tests were failing because services were not public, and DI Container was getting them in tests.
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
9a40f08e66 Update composer package pelago/emogrifier
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
211ee1a7ec Update composer package twig/twig
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
3dbb646c20 Update composer package sabberworm/php-css-parser
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
75a604c79a Update composer package nesbot/carbon
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
ecb32a35c4 Update composer package monolog/monolog
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
ea909f8961 Update composer package gregwar/captcha
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
918758490d Update cerdic/css-tidy composer package
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
6d218bd1ea Increase required PHP version in prefixer folder
[MAILPOET-6101]
2024-06-17 12:38:08 +02:00
822a0d97f8 Configure spacing units in form editor properly
Without this configuration, the block editor uses a fallback value
which is always a new array and causes a shallow check to mark it as a new value
and was causing
"The 'useSelect' hook returns different values when called with the same state and parameters"
warning and rerenders of the blocks panel.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
32bdb8cec8 Pass ref to the inserter library
The ref is needed to prevent an error triggered when inserting a block
from the inserter sidebar.
The error was not causing a visible issues but was logged in console and causing acceptance
test to fail.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
c34bf297c6 Fix email editor snackbar notices
The notices property on the interface skeleton doesn't work anymore.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
2a3ea5e4f4 Hide form editor preview button on mobile
Form preview doesn't work properly on mobile and the button takes
There is too much space in the header.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
a7f66dcde6 Add ListView sidebar
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
4f84443a47 Fix drag and drop for options for custom select and radio options
This regression was introduced long ago when we switched to react 18.
More details here
https://medium.com/@wbern/getting-react-18s-strict-mode-to-work-with-react-beautiful-dnd-47bc909348e4
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
e8e5370c7e Replace deprecated useSetting hook usage
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
ef4eff86af Fix font size settings in the email editor
The size picker reads from a different settings property
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
6d509b7bc6 Fix saving fresh RichText value in the form editor
This commit addresses two issues:
1) Newly added paragraph and heading blocks have instance RichTextData
instead of a plain string as a content attribute. To address that I added .toString().
2) I experienced that blocks passed via onChange or onInput callbacks might not contain
the latest RichTextData for headings and paragraphs (for example last couple of letters was missing).
This was causing an issue when the user saved immediately after finishing editing (was caught by a test).
I fixed that by using the blocks directly from the block editor store for saving.
At the same time, I removed the onInput callback. The reasoning here is that currently, we use the blocks in our store
as a backup state, which is used to restore accidentally deleted required blocks.
So triggering the reducer and validation for both callbacks was a bit overkill.

[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
b69e508870 Group selects and useMemo for config in main form editor component
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
679039692e Enforce the big appender all the time and fix unselecting blocks
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
2a8362f4c2 Use Tabs component in coupon block settings
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
d1a4d80459 Fix the size and scrolling of the inserter sidebar in the form editor
[[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
99d726e378 Pnpm dedupe
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
f22976bf32 Update @wordpress/scripts and downgrade dependency-extraction plugin
We can't update to latest @wordpress/dependency-extraction-webpack-plugin
and latest @wordpress/scripts (at the time of committing 28.0.0) because
a BC issue is causing it doesn't work for WP lower than 6.6.

See https://github.com/WordPress/gutenberg/issues/62202#issuecomment-2149165189

[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
c2d782506b Update wordpress/scripts
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
dedd9d52c2 Group multiple useSelect to one in the dynamic segment from
This is just a tiny optimization I did when debugging the acceptance test, and I decided to keep it.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
bd1cf97085 Hide tabs in inserter panel in form editor
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
ac1cd97819 Remove the commented validate-multiple-use hook from form editor
The code was commented because it was breaking the build after dependencies update.
The functionality is now directly included in the block editor
so we can safely remove the code.
See https://github.com/WordPress/gutenberg/pull/62086
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
9736265341 Fix js lint errors
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
ba3a29881c Limit TS check maximal memory usage
We were hitting the 2GB limit on CircleCI small instance
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
aa80fd8d1c Update acceptance tests
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
9424c720fc Fix form editor sidebar space for support beacon
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
90a8ee4503 Refactor form editor sidebar header to use Tabs instead of custom HTML
Gutenberg switched to tabs and removed CSS used for <ul>.
In this commit, we switched to the Tabs component.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
a202db3532 Update className for email editor sidebar header
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
0d62d28d82 Refactor automation editor sidebar tabs to use Tabs component
Gutenberg switched to tabs and removed CSS used for <ul>.
In this commit, we switched to the Tabs component.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
6e5d2654fb Use proper icon in more menu in automation and email editors
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
d083efacd9 Fix header appearance in the automation editor
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
6fa6f723f9 Fix header appearance in the form editor
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
65b72a2b88 Fix dropdown popover props in automation step's more menu
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
3a84ba3352 Remove ts-expect-error where no longer necessary
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
27045081b0 Fix TS errors related to __experimentalConfirmDialog
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
338a81e9c7 Comment out a hook that no longer exists
The file was removed. In this commit, I commented it out to make the build
pass.
This will need further investigation.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
e5f5814974 Replace MoreMenuDropDown with basic DropdownMenu
The MoreMenuDropDown was removed from @wordpress/interface.
This commit replaces it with a generic DropdownMenu to make the build passing.
It will need further adjustments.
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
859520e235 Update all wordpress packages to their latest versions
[MAILPOET-6054]
2024-06-17 12:06:53 +02:00
6e81d3e149 Update readme.txt tags
[MAILPOET-6107]
2024-06-13 14:26:51 -05:00
f5ae03a5a6 Update import/export tests to account for WP and WC lists
[MAILPOET-3977]
2024-06-12 12:13:37 +02:00
057f25c119 Don't allow importing to WordPress Users list
[MAILPOET-3977]
2024-06-12 12:13:37 +02:00
552803bcf9 Add test for screen reader text rendering
[MAILPOET-6098]
2024-06-12 11:59:12 +02:00
3e6aeb7362 Hide screen reader text in emails, while still accessible by screen readers
[MAILPOET-6098]
2024-06-12 11:59:12 +02:00
5f598adee2 Extract ping notices common code to useServiceCheck hook
[MAILPOET-6030]
2024-06-12 11:16:51 +02:00
66d96e11be Add bridge ping error notice
[MAILPOET-6030]
2024-06-12 11:16:51 +02:00
a6caf0a1e6 Add bridge ping endpoint
[MAILPOET-6030]
2024-06-12 11:16:51 +02:00
7aa006d9f7 Release 4.51.2 2024-06-12 10:36:54 +02:00
80e01be083 Remove unit test with premium oldest
[MAILPOET-6095]
2024-06-12 10:05:48 +02:00
50ba99e99b Update used versions of 3rd party plugins in CI job
[MAILPOET-6095]
2024-06-12 10:05:48 +02:00
3dc40cf644 Change the time of running nightly builds
When the nightly build ran on Monday at 10 PM, we found the output from the nightly run was too late.
[MAILPOET-6095]
2024-06-12 10:05:48 +02:00
28c7d33f8f Differentiate between changing URL and iconType in social block
We prefixed iconType with URL protocol, which caused the changing iconType to stop working. I added a new function that helps make the difference between iconType and URLs.
[MAILPOET-6106]
2024-06-11 15:19:45 +02:00
e670d84b97 Bump composer/composer from 2.7.6 to 2.7.7 in /mailpoet
Bumps [composer/composer](https://github.com/composer/composer) from 2.7.6 to 2.7.7.
- [Release notes](https://github.com/composer/composer/releases)
- [Changelog](https://github.com/composer/composer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/composer/composer/compare/2.7.6...2.7.7)

---
updated-dependencies:
- dependency-name: composer/composer
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-11 13:40:42 +02:00
3b190a3a21 Fix acceptance tests
MAILPOET-6028
2024-06-10 17:26:48 +02:00
f7d28c8999 Ensure page reload is only done for the settings page
MAILPOET-6028
2024-06-10 17:26:48 +02:00
62c9679804 Ensure the Authorize from address modal is shown on reload
MAILPOET-6028
2024-06-10 17:26:48 +02:00
25067a5e87 Ensure we fetch the user authorized_emails and domains when MSS is activated
MAILPOET-6028
2024-06-10 17:26:48 +02:00
e2cd1b315a Reload settings page after key activation
MAILPOET-6028
2024-06-10 17:26:48 +02:00
fb0f9d086f Update SendingMethodConfirmationModal, add links and fix minor errors
MAILPOET-6028
2024-06-10 17:26:48 +02:00
6efbd858a2 Fix inconsistent messaging around MailPoet API key state and validity
MAILPOET-6028
2024-06-10 17:26:48 +02:00
31d7309345 Add Sending Method Confirmation Modal
MAILPOET-6028
2024-06-10 17:26:48 +02:00
8caf7491d8 Change global-notices.jsx to tsx
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
00d83d657a Cache successful cron ping result
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
827888fed3 Show cron ping eror notice globally
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
28d09b8b5e Add cron ping error notice
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
c3a55ac1d8 Move some strings to layout view to make them shared
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
c59ae2d82c Add cron pinging endpoint
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
07ef513bce Expose cron trigger method setting to JS
[MAILPOET-6029]
2024-06-10 17:07:31 +02:00
514d028b5a Resize twitter icon
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
cc970e1dce Update Twitter icon
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
405b18e859 Update the default urls for social websites
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
d22936ede9 Rename Youtube
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
081c6f6301 Rename Twitter
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
2af4f4bfc6 Remove google plus
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
537afbdd89 Remove line icons
[MAILPOET-5582]
2024-06-10 14:38:45 +02:00
9c86227290 Update ERROR_MESSAGE_BULK_EMAIL_FORBIDDEN
[MAILPOET-6024]
2024-06-10 11:12:22 +02:00
4e218708b9 Show notice when WP-cron is disabled
[MAILPOET-6027]
2024-06-10 10:18:05 +02:00
070fd30b6e Update the notice message to fix consistency
MAILPOET-6022
2024-06-07 17:17:57 +02:00
f877918c19 Fix infinite error messages notice.
This is because we call `getItems()` in a few places already and this `notices.apiError` causes a render which causes `getItems()` to re-render, and so on.

MAILPOET-6022
2024-06-07 17:17:57 +02:00
0bbad6e24f Use MailPoet error notices in Dynamic Segments
MAILPOET-6022
2024-06-07 17:17:57 +02:00
c2a61ebd86 Fix lint error
MAILPOET-6022
2024-06-07 17:17:57 +02:00
b84585c4af Add support for MailPoet API Error notice in Frontend JS files.
This will ensure the error message is well displayed including any additional html content

MAILPOET-6022
2024-06-07 17:17:57 +02:00
67d6ff56f3 Use MailPoet API Error notice when possible.
This will ensure the error message is well displayed including any additional html content

MAILPOET-6022
2024-06-07 17:17:57 +02:00
4f63437ccc Add html to the error message
MAILPOET-6022
2024-06-07 17:17:57 +02:00
d7bad4d292 Fix failing test
MAILPOET-6022
2024-06-07 17:17:57 +02:00
95e595de42 Invalid API endpoint exception improvement
MAILPOET-6022
2024-06-07 17:17:57 +02:00
a7df6b496f Add logging for unexpected states when we reach the end of sending
[MAILPOET-5881]
2024-06-07 11:32:46 +02:00
9dd808a070 Set as invalid only for non-campaign email types
For non-campaign emails, we use scheduled tasks to display processed stats.
The invalid tasks are no longer processed, and they don't block the queue
and are not counted in the stats.
For campaign emails (bulk emails), we just mark them as sent to zero recipients.
[MAILPOET-5881]
2024-06-07 11:32:46 +02:00
e4cff6c14f Remove an unnecessary condition in the batch processing loop
The batch will be continued anyway because of the next condition
if (!$queue->getCountToProcess()) {
  continue;
}
The newsletter entity will be marked as sent (plus other stuff related to finished sending)
after the loop in $this->endSending.
2024-06-07 11:32:46 +02:00
55ae6264cc Add method for processing end of sending for completed tasks
[MAILPOET-5881]
2024-06-07 11:32:46 +02:00
1111bac58b Unify behavior for sending paused during processing
In all other cases when we pause sending, we immediately end
the processSending method. In this case, we would unnecessarily
start processing one more batch.
[MAILPOET-5881]
2024-06-07 11:32:46 +02:00
3cb92fb823 Display MSS notices on all MailPoet pages
[MAILPOET-6026]
2024-06-07 10:34:50 +02:00
5846b0add8 Reword sending paused message for Creator plans
[MAILPOET-6026]
2024-06-07 10:34:50 +02:00
79a05af23c Fix WooCommerce sync with empty email
[MAILPOET-5885]
2024-06-06 11:23:44 +02:00
eb6cd87133 Add a limit to timeout in throttling function
to prevent integer overflows

[MAILPOET-6103]
2024-06-06 09:17:52 +03:00
0515b0e5d0 Remove unused code 2024-06-05 10:13:07 +01:00
29589239d5 Add missing backward slash 2024-06-05 10:13:07 +01:00
db370dc962 Release 4.51.1 2024-06-04 09:38:40 -05:00
ca37283807 Update automation test to use first day of the month
[MAILPOET-6100]
2024-06-03 12:46:38 -05:00
758a17bac4 Add waiting for element visible before filling checkout
[MAILPOET-6100]
2024-06-03 12:46:38 -05:00
98c721feed Update tests and add a test case for the button block
[MAILPOET-4905]
2024-06-03 13:19:10 +02:00
a50ca402b0 Use the method for setting URLs in social media fields
[MAILPOET-4905]
2024-06-03 13:19:10 +02:00
9ea879fa5a Use the improved method for URLs for the button and image link fields
[MAILPOET-4905]
2024-06-03 13:19:10 +02:00
bfc948b382 Add a method for sanitizing inputs that expect URL in the legacy email editor
[MAILPOET-4905]
2024-06-03 13:19:10 +02:00
655658a601 Add spinner to the email editor when loading is in progress
[MAILPOET-6085]
2024-06-03 11:49:01 +02:00
ddff870f39 Update composer dependency phpunit/phpunit
[MAILPOET-6094]
2024-06-03 09:54:05 +02:00
7064f428fe Update composer dependency wp-cli/wp-cli-bundle
[MAILPOET-6094]
2024-06-03 09:54:05 +02:00
50bb5a22da Update composer dependency guzzlehttp/guzzle
[MAILPOET-6094]
2024-06-03 09:54:05 +02:00
cea227a5c9 Update composer dependency vlucas/phpdotenv
[MAILPOET-6094]
2024-06-03 09:54:05 +02:00
213e399811 Update composer dependency woocommerce/action-scheduler
[MAILPOET-6094]
2024-06-03 09:54:05 +02:00
d649ae2189 Update Woo version
[MAILPOET-6060]
2024-05-31 12:22:58 +02:00
1f687fa80b Use tabs component for sidebar tabs instead of custom HTML
[MAILPOET-6086]
2024-05-31 12:20:45 +02:00
12df8bd7fa Remove bc code for WP 6.4 from email editor
[MAILPOET-6086]
2024-05-31 12:20:45 +02:00
a032cc1ba1 Revert "Test nightly jobs"
This reverts commit 5128c2d7732192d306303f4acf0550bdda94ee44.
2024-05-31 11:46:28 +02:00
5043338a60 Test nightly jobs 2024-05-31 11:46:28 +02:00
60a3b0220c Improve the form test with multiple lists 2024-05-31 11:46:28 +02:00
39669ece0a Change logic of the two tests 2024-05-31 11:46:28 +02:00
3938f0ea2e Refactor acceptance tests 2024-05-31 11:46:28 +02:00
71fc5c1e1b Update order received 2024-05-31 11:46:28 +02:00
657d4af1e7 Update WP theme and include blockbased flow
[MAILPOET-5787]
2024-05-31 11:46:28 +02:00
224955bf00 Fix test data not always being 3 months ago at the end of the month
For instance, when it's May 31, then "new \DateTimeImmutable()->modify('-3 months')"
is March 1, while we would expect the date to be in February.
2024-05-31 10:41:46 +03:00
b5e99065b0 Fix flaky automation and homepage tests 2024-05-29 15:55:10 +01:00
4c5267344e Add new types for email template preview
[MAILPOET-6044]
2024-05-29 11:20:33 +02:00
3ddf56574c Add new EmailTemplate type
[MAILPOET-6044]
2024-05-29 11:20:33 +02:00
181f822782 Add store types for @wordpress/editor package
[MAILPOET-6044]
2024-05-29 11:20:33 +02:00
0fbe27cf4e Replace ts-ignore comments with ts-expect-error in the email editor code
[MAILPOET-6044]
2024-05-29 11:20:33 +02:00
e59096fbd1 Load assets for iframe editor
In order to provide styles for the iframe, we need to pass those
styles/script through the editor settings. The post and site editors use
get_block_editor_settings for that.
We currently build editor settings ourselves so I used the same function
_wp_get_iframed_editor_assets which is used internally in the get_block_editor_settings.

We also grab the assets early in the initialization phase, because _wp_get_iframed_editor_assets
reads from global $wp_styles and $wp_scripts and fetching the scripts later may include unwanted scripts.
[MAILPOET-6079]
2024-05-29 10:46:02 +02:00
74c4ec71d6 Update README.md – support info improvement
Co-authored-by: Oluwaseun Olorunsola <30554163+triple0t@users.noreply.github.com>
2024-05-29 07:24:09 +02:00
01aea16821 Update mailpoet/README.md
Co-authored-by: Oluwaseun Olorunsola <30554163+triple0t@users.noreply.github.com>
2024-05-29 07:24:09 +02:00
2385a2dc17 Update README.md
Co-authored-by: Oluwaseun Olorunsola <30554163+triple0t@users.noreply.github.com>
2024-05-29 07:24:09 +02:00
3b279295b5 Update info about the support 2024-05-29 07:24:09 +02:00
22172172b4 Release 4.51.0 2024-05-28 15:38:03 +02:00
c8fa9f007f handleExceptionDuringQuery not used by Rollback so we need catch it
MAILPOET-6020
2024-05-27 15:11:54 +02:00
998ea3d1ff Tracy throws a weird error here when the requestData type is string
MAILPOET-6020
2024-05-27 15:11:54 +02:00
81f29a61ac Catch mySqlGoneAway error from originated from MailPoet crons
MAILPOET-6020
2024-05-27 15:11:54 +02:00
988dec3e66 Catch mySqlGoneAway error from originated from the Doctrine library and append our custom error message to it
We're hooking into handleExceptionDuringQuery because most of the methods on the `\Doctrine\DBAL\Connection` class call this method in their catch error handler

MAILPOET-6020
2024-05-27 15:11:54 +02:00
0eb171ee6a Add helper for mySqlGoneAway error handler
MAILPOET-6020
2024-05-27 15:11:54 +02:00
ef994e36ec Increase top padding for block tools in the form editor
[MAILPOET-5340]
2024-05-27 09:49:02 +02:00
a1b6c41aef Do not set cookie if we know that headers were sent
[MAILPOET-5269]
2024-05-24 14:27:39 +02:00
ac5151e2db Fix flaky acceptance tests
[MAILPOET-6083]
2024-05-24 12:27:01 +02:00
86771c23a7 Fix alignment of header 2024-05-24 12:22:23 +02:00
9cec1b3093 Update classnames to fix toolbar alignment 2024-05-24 12:22:23 +02:00
ad9800ebff Fix PHP warning for justifyContent 2024-05-24 12:22:23 +02:00
fcb41a3a9b Fix default font size for text 2024-05-24 12:22:23 +02:00
bb38000845 Update the button selector 2024-05-24 12:59:37 +03:00
68e9e80583 Revert selector for button submit 2024-05-24 12:59:37 +03:00
0758c93b1a Add missing comma 2024-05-24 12:59:37 +03:00
eb5f82807a Update tests with date now 2024-05-24 12:59:37 +03:00
28bdc7f009 Update k6 to latest and improve segments tests
[MAILPOET-6071]
2024-05-24 12:59:37 +03:00
69df4dfcd8 Use standard escaping function
[MAILPOET-5281]
2024-05-24 10:59:25 +02:00
97ff555345 Format newsletter subject before printing
[MAILPOET-5281]
2024-05-24 10:59:25 +02:00
22da191032 Fix MailPoet marked as incompatible with Woo HPOS
[MAILPOET-6082]
2024-05-23 20:59:27 +02:00
9e68df80fd Fix display of upgrade banner on subscribers stats page
[MAILPOET-5968]
2024-05-23 19:48:57 +02:00
693fbfafb1 Remove MssAccessNotice component from newsletter stats
[MAILPOET-5966]
2024-05-23 17:28:49 +02:00
1b13a8fc5e Use a pattern coming from mailpoet in the select modal.
When a theme or plugin adds some core/post-content patterns, we might pick the wrong one for the select modal.
[MAILPOET-6065]
2024-05-23 13:15:50 +02:00
7b99be42b4 Display appender icon (+) in between blocks in template mode
[MAILPOET-6065]
2024-05-23 13:15:50 +02:00
1c21843715 Reintroduce PostLockedModal component
The blank page for the PostLockedModal was probably caused by the same
condition. I was not able to replicate that after I removed the condition.
[MAILPOET-6065]
2024-05-23 13:15:50 +02:00
edb6e0c481 Hide the editor only on the top level starting
[MAILPOET-6065]
2024-05-23 13:15:50 +02:00
4de75d600f Do not hide the editor when the template is not loaded
In template mode, there is no template, so when we re-render
(e.g. when rendering inserter popup) the editor goes blank
[MAILPOET-6065]
2024-05-23 13:15:50 +02:00
58a7c93a52 Add missing step to go to segments page 2024-05-23 11:01:27 +02:00
d9df7cc01d Fix flaky acceptance test in segments
[MAILPOET-6076]
2024-05-23 11:01:27 +02:00
cad3915ef7 Fix flaky acceptance test in Automation
[MAILPOET-6076]
2024-05-23 11:01:27 +02:00
962e02ac30 Remove blockgap support 2024-05-23 10:58:49 +02:00
148b4bb6ac Fix default line height 2024-05-23 10:58:49 +02:00
cbb90fbc3e Fix image center alignment in editor 2024-05-23 10:58:49 +02:00
f8dd475de6 Skip gaps for buttons during render 2024-05-23 10:58:49 +02:00
9b921a0cac Prevent reopening modal for unsaved email when switching modes
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
9ce541753a Update acceptance tests to close the template selection modal
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
a1bd40f6ef Prevent closing modal when templates are still loading
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
960884a484 Prevent strange resizing of templates after rendered in modal
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
90df0a8813 Remove Select Template button from template panel
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
4cbb39f56d Display template selection on editor start
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
56449eb503 Do not add default content on email create on backend
[MAILPOET-6049]
2024-05-22 15:15:03 +02:00
cdd092c561 wait for iframe 2024-05-22 11:36:09 +02:00
90577eb616 Switch to iframe context 2024-05-22 11:36:09 +02:00
7032ba7d52 Iframe selector in tests 2024-05-22 11:36:09 +02:00
7f275e0edc Use iframe to fix background styles 2024-05-22 11:36:09 +02:00
4945a8003f update padding test 2024-05-22 11:36:09 +02:00
a69f9ca69e Update test to use fff not ffffff 2024-05-22 11:36:09 +02:00
28497f9d1c Update tests. Default background color is not set at block level. 2024-05-22 11:36:09 +02:00
61f7a9ab68 Force post content to prevent conflicts with woo 2024-05-22 11:36:09 +02:00
d5bfe33f28 Remove content hack to prevent re-render when selecting colors 2024-05-22 11:36:09 +02:00
c3d0f23a3f Fix text decoration 2024-05-22 11:36:09 +02:00
b510e07942 Fix button styles are applied
[MAILPOET-5641]
2024-05-22 11:36:09 +02:00
1fab8a31f3 Ensure the template theme is always an object.
Sending it as an empty array was causing that deepmerge in emailCss hook was returning null.
It was happening for the general-email template which has no theme file
[MAILPOET-5641]
2024-05-22 11:36:09 +02:00
c3dcc13f2c Fix renderer styles 2024-05-22 11:36:09 +02:00
4100991354 Add link styles 2024-05-22 11:36:09 +02:00
3a8813cba7 Move maybeConvertPreset functionality to theme controller 2024-05-22 11:36:09 +02:00
dca470f216 strstr 2024-05-22 11:36:09 +02:00
18710cd259 Add color panel and handle rendering 2024-05-22 11:36:09 +02:00
d6b309176a Fix typo error
[MAILPOET-6070]
2024-05-22 08:12:59 +02:00
3cfa893930 Fix button witdth so it fits wider labels
[MAILPOET-6070]
2024-05-22 08:12:59 +02:00
9eb1c307c7 Add comment for translations
[MAILPOET-6070]
2024-05-22 08:12:59 +02:00
cfd2fe5496 Update readme after sales
[MAILPOET-6075]
2024-05-21 16:44:58 +03:00
8595e99e42 Release 4.50.1 2024-05-21 14:22:50 +02:00
4bde12bc53 Add backslash character to rexExp in parseQuery function
Adding backslash to regExp helps to avoid failing make-pot command when we extract JS translations.
[MAILPOET-6074]
2024-05-21 12:26:20 +02:00
c65a17bac7 Update WC stable tag
[MAILPOET-5984]
2024-05-20 16:25:27 +02:00
0f7301deeb Update tests to reflect the new logic
MAILPOET-5963
2024-05-18 20:33:33 +02:00
e6c31ee737 Set guest user by default to unsubscribed
The status will be updated when the user opts in for marketing email on checkout

MAILPOET-5963
2024-05-18 20:33:33 +02:00
3c8f354039 Fix WPCOM debug bar styles exclusion
[MAILPOET-6066]
2024-05-17 15:33:40 +03:00
19ad4133ab Stop MailPoet Daemon execution when in maintenance mode
MAILPOET-6021
2024-05-17 12:53:19 +01:00
d718441e1a Deactivate MailPoet cron when the site is in maintenance mode
MAILPOET-6021
2024-05-17 12:53:19 +01:00
6d81a595d2 Deactivate MailPoet cron when plugin update is about to begin
MAILPOET-6021
2024-05-17 12:53:19 +01:00
e6f9564ef0 Fix compatibility with gutenberg plugin 2024-05-17 11:26:44 +02:00
ea988f0850 Leave main variation active 2024-05-17 11:26:44 +02:00
5821e11467 Update heading test 2024-05-17 11:26:44 +02:00
e6d7cf5950 Update SettingsController unit test for moved layout settings
[MAILPOET-6057]
2024-05-17 11:26:44 +02:00
7c9b72bcc4 Add get_settings to stub for theme json class 2024-05-17 11:26:44 +02:00
121234d9cd get_settings mock 2024-05-17 11:26:44 +02:00
48cc71f98f Attempt to fix mock 2024-05-17 11:26:44 +02:00
5fac09e343 Remove default content size from template 2024-05-17 11:26:44 +02:00
d20b4bb6c9 Add group support w/ support for contentSize 2024-05-17 11:26:44 +02:00
4ee81fdd35 Apply border style when border color is defined 2024-05-17 11:26:44 +02:00
4b2c1fe245 Disable block variations for groups—we do not support flex layout 2024-05-17 11:26:44 +02:00
7a10fbb8ff Update Public API documentation
MAILPOET-6056
2024-05-16 18:02:01 +02:00
f91812b1da Allow Public API method updateList update segment description with the same segment name
MAILPOET-6056
2024-05-16 18:02:01 +02:00
736068cf57 Audit missing escaping during block rendering 2024-05-15 13:27:52 +02:00
d5c1fba8d7 Add missing textdomains 2024-05-15 07:16:25 -04:00
9c56b997a6 Update the labels in subscribers listings
[MAILPOET-6042]
2024-05-15 11:54:13 +02:00
1bcccd9390 Display when subscriber was created in listings
[MAILPOET-6042]
2024-05-15 11:54:13 +02:00
f9d5d50b66 Add filter on system info data
[MAILPOET-6013]
2024-05-14 13:03:37 +02:00
4d29faf998 Add permission level for the help page
[MAILPOET-6013]
2024-05-14 13:03:37 +02:00
aa070c415d Add custom placeholder to post content during registration 2024-05-13 12:46:02 -04:00
aa14f0c2b3 Update k6 automation test to remove if else 2024-05-09 14:47:44 +02:00
b440a791f9 Fix performance test for saving segment
[MAILPOET-6062]
2024-05-08 20:32:13 +02:00
f74cbbf82b Increase waiting time in activateMSS acceptance test 2024-05-08 15:37:49 +02:00
32aa7a3480 Fix form column styles for stack-on-mobile
[MAILPOET-5994]
2024-05-08 14:49:44 +02:00
249b6edac8 Fix installed dependencies for the form editor
[MAILPOET-5994]
2024-05-08 14:49:44 +02:00
fda5e84a76 Configure inserter panel to use post content as a root
[MAILPOET-6059]
2024-05-08 14:17:55 +02:00
be3b8753e3 Release 4.50.0 2024-05-08 15:15:38 +03:00
ca35cad824 Update documentation: remove unused hooks
MAILPOET-5597
2024-05-07 14:44:31 +02:00
b4c6f6af20 Added documentation about the email editor hooks.
MAILPOET-5597
2024-05-07 14:44:31 +02:00
edf3c84628 Use create post helper 2024-05-07 12:08:48 +01:00
4c534f40e7 wp_insert_post in tests 2024-05-07 12:08:48 +01:00
ca7a89ca06 Update block used in tests 2024-05-07 12:08:48 +01:00
9c27518a2f Fix build due to tsx files 2024-05-07 12:08:48 +01:00
a3e156c530 Powered by mailpoet block editor 2024-05-07 12:08:48 +01:00
af1faea7ce Add Powered By MailPoet Block 2024-05-07 12:08:48 +01:00
627003dbcb Remove email content block 2024-05-07 12:08:48 +01:00
abea414930 Remove footer logo from renderer 2024-05-07 12:08:48 +01:00
3a3c51abaf Revise footer logo options 2024-05-07 12:08:48 +01:00
2bf41c549d Load blockTypesController before editor 2024-05-07 12:08:48 +01:00
207d0b954c Update RoboFile with new parameters and delete cot plugin 2024-05-06 14:45:09 +02:00
e02c86b9a7 Refactor CI workflows
[MAILPOET-6040]
2024-05-06 14:45:09 +02:00
780c350fc5 Fix condition to display Segments Locked badge
account for segmentFilters.value=0 when segmentFilters are unlimited.

[MAILPOET-6025]
2024-05-06 14:31:25 +02:00
488717e134 Update acceptance test to check that send email step status synces with the email
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
7e87842eeb Fix typo in exception message
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
345571c6f9 Fix missing dummy IDs in tests
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
f71993dde9 Cancel scheduled progress runs when executed manually
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
a1bafad6f1 Add tests for email sent handler
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
fdc0468c64 Execute send email step progress when email is sent
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
4c1b2e46c8 Trigger automation email sent hook for automation emails
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
36089cc2f4 Save automation run info to scheduled task meta field
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
9303d89957 Add test for automation controller
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
fa6b380266 Add controller with ability to execute automation step progress manually
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
123b0d65e2 Do not complete send email action run immediately, schedule a check instead
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
a94c090570 Fix typo in test
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
7eb17c9e09 Ensure automation progress runs log data also at their start
[MAILPOET-4977]
2024-05-06 12:39:00 +02:00
25a35e17bf Add migration to fix existing data
[MAILPOET-5584]
2024-05-06 11:43:32 +02:00
e4ad546452 Extend integration test
[MAILPOET-5584]
2024-05-06 11:43:32 +02:00
191843d2a8 Change status for all associated purchases with an order
[MAILPOET-5584]
2024-05-06 11:43:32 +02:00
56e1a69e5b Add skipping new email editor acceptance test on WP 6.4
[MAILPOET-6055]
2024-05-03 10:55:53 +02:00
e47ce06b4a Use useEffect to focus text input in the preview modal on open
[MAILPOET-6011]
2024-05-02 12:42:20 +02:00
47d5fa93d4 Make the CSS selector for modal with more specific
Because the version of the modal component contains its own width style, we need to make the selector more specific to override width.
[MAILPOET-6011]
2024-05-02 12:42:20 +02:00
b18bb14ecc Fix scheduled task entity having the same association twice
It also seems that orphanRemoval doesn't play well with our explicit detachAll logic.

[MAILPOET-6047]
2024-05-02 11:52:33 +02:00
55416fd2ff Increase waiting time for the email editor 2024-05-02 10:07:40 +01:00
f3d03d82e3 Fix acceptance test WC category segment 2024-05-02 10:07:40 +01:00
5e8a377669 Fix template counts in tests
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
4b9bd36b99 Update passing capabilities to upgrade info and banner components
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
62dad1eca6 Allow specifiying multiple capabilities with their values in premium banner
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
8369459e16 Allow specifiying multiple capabilities with their values in upgrade info
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
6cac814b5f Allow objects in upgrade URLs (such as "capabilities[name]=value")
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
72f49808d0 Check for required number of steps for automation templates
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
6e66bf1f4b Add tier to MailPoet object
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
9de62db7df Add number of required automation steps to templates
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
575ce3cc5c Move purchased templates to the free plugin
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
3a5f108e42 Change free-only templates to default
[MAILPOET-6002]
2024-05-01 12:26:09 +02:00
21441ecc4a Update tests to match new template markup 2024-05-01 11:15:27 +01:00
f6c9308adc Fix mocks in FlexLayoutRendererTest
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
dd93d92a8e Fix issues caused by posts not being saved and CSS inliner change
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
0bbe31b005 Fix RendeterTest
Post is save to DB and asserts are updated for the new css inliner
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
1b13d041f1 Add a helper for creating posts in integration tests
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
143e1f9e30 Fix empty columns margin render 2024-05-01 11:15:27 +01:00
e6aef6f0a5 Update ContentRenderer:testItInlinesContentStyles test
This new inliner library adds a space between the rule and value
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
76c60aa5e0 Update BlocksRegistryTest
- testItAllowsToReplaceRendererViaFilter is no longer needed as we removed the filter
- testItRemovesAllBlockRenderers this responsibility was moved to ContentRenderer
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
3f3787ac4b Empty block does not appear in blank content—update test. 2024-05-01 11:15:27 +01:00
655302006e Fix union type for php7 2024-05-01 11:15:27 +01:00
d0f75213fe Slightly polished templates for the demo
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
064c9ae160 Disable send button in template mode or when there are unsaved changes
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
86498e6478 Nicer formatting of experimental templates panel
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
20d3fb2995 Move the save panel to the dropdown under the save button
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
ac78e63db6 Fix alignment is not applied in the template preview
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
3896365aac Fix canvas height and scrolling
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
91c19d3f55 Use correct template titles in template select modal
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
a3575638b1 Make email-general template blank
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
e284fa8710 Change header based on template edit context 2024-05-01 11:15:27 +01:00
f0a743a8e0 Correct the template name in the templates panel 2024-05-01 11:15:27 +01:00
1db80991c1 Add "revert template" function 2024-05-01 11:15:27 +01:00
d9859fe19f Add select template modal appearance
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
c2c14b96d8 Fix scrolling in canvas when editing email content
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
769cf307d2 Save email styles to template theme to template's post meta
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
923db5f598 Fix error with template editing state 2024-05-01 11:15:27 +01:00
1bd7c8dae0 Remove <PostLockedModal /> 2024-05-01 11:15:27 +01:00
b4cc170f5a Show global snackbars 2024-05-01 11:15:27 +01:00
e2f99d8795 Full height editor 2024-05-01 11:15:27 +01:00
a13997cede Hide editor with null template 2024-05-01 11:15:27 +01:00
7e24ac02ad Await template load before rendering editor 2024-05-01 11:15:27 +01:00
32a1cdacaa Load and apply styles from a template in the editor
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
53d65aace8 Reuse DefaultContent in save controller 2024-05-01 11:15:27 +01:00
d39e946e82 Consistent gaps for header/content 2024-05-01 11:15:27 +01:00
49c6ed084c Make template editor fill canvas 2024-05-01 11:15:27 +01:00
275ad1cb7a Add support for color.text in styles
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
c321eb282e Refactor renderers to use template JSON 2024-05-01 11:15:27 +01:00
73ba5923ef Allow saving background.coloro to mailpoet_email_theme
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
e8352d3dc8 Save template styles to mailpoet_email_theme
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
f2333cddf5 Fix fetching styles for template previews
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
ccad08822d Use mailpoet content pattern in template previews
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
7ba921018a Use the main background in the preview components in styles
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
3f68881478 Fix type issues after rebase
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
abc9e58c68 Pass template style settings to the client in the template response
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
7590576c09 Hide sidebar when clicking canvas 2024-05-01 11:15:27 +01:00
118c0edb72 Create pattern for default content 2024-05-01 11:15:27 +01:00
f2a2709582 Refactor templates fetching to a hook
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
efafa95ef7 Set the selected template to the post
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
3a3ee4504a Fetch templates data for select template modal via API
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
4becea02ff Set content pattern when selecting template from select tempate modal
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
f159a23a8a Cleanup layout file 2024-05-01 11:15:27 +01:00
8bc52a29b9 Inline styles using emogrifier 2024-05-01 11:15:27 +01:00
4b411af1ca Update general template to enforce content width 2024-05-01 11:15:27 +01:00
21ae45acb6 Enqueue special block styles and inject using emogrifier 2024-05-01 11:15:27 +01:00
c8163059f0 Remove extra padding in editor 2024-05-01 11:15:27 +01:00
004c31e5d7 Remove extra padding and empty rendered paragraphs 2024-05-01 11:15:27 +01:00
c660fd217f Add columns to default content 2024-05-01 11:15:27 +01:00
71d9d628e9 Add emogrifier 2024-05-01 11:15:27 +01:00
7874b12bf6 Remove invalid bg property from json 2024-05-01 11:15:27 +01:00
9f38100567 Add select template modal with hardcoded template, pattern data 2024-05-01 11:15:27 +01:00
5563e7ecef Remove unused BlockEditor component
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
047fd4930b Render email styles via EditorCanvas
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
66108e9588 Move the document bar component to header
[MAILPOET-6014]
2024-05-01 11:15:27 +01:00
fc1a408ea9 Use iframed canvas for template mode 2024-05-01 11:15:27 +01:00
53424c4136 Use createInterpolateElement for links 2024-05-01 11:15:27 +01:00
05b930081f Do not fetch template when editing template 2024-05-01 11:15:27 +01:00
15f3ffb16e Remove a couple of useless wrappers from the editor component
- the shortcuts seems to work without the provider component
- slot fill is added in the InnerEditor
2024-05-01 11:15:27 +01:00
1e0a6cf51e Fix incorrect keys warning in detail panel 2024-05-01 11:15:27 +01:00
4a0f46e3d4 Hide templates from site editor 2024-05-01 11:15:27 +01:00
76f6e7cdbd Render using custom template on preview 2024-05-01 11:15:27 +01:00
36ff27d927 Fix block toolbar and spotlight toggles 2024-05-01 11:15:27 +01:00
1ab89f36ae Fix error when clicking saving in experimental panel 2024-05-01 11:15:27 +01:00
07c974e7c7 Added the ability to edit the general-email template in site editor 2024-05-01 11:15:27 +01:00
3eaaa3edde Add templates experiment panel with save component and post/template toggle WIP 2024-05-01 11:15:27 +01:00
00e158108f Assign email-general template in editor 2024-05-01 11:15:27 +01:00
c834ca3ab6 Enable template mode + style it 2024-05-01 11:15:27 +01:00
82a0792fe3 Add EditTemplate button 2024-05-01 11:15:27 +01:00
e03ec76858 Use the inner editor instead the BlockEditor component 2024-05-01 11:15:27 +01:00
1449cacf49 Add a hook for navigating between posts
Copied from @wordpress/edit-post
2024-05-01 11:15:27 +01:00
b0e235ef26 Add Layout component with EditorCanvas
Basically, it's a copy of the block-editor.tsx minus canvas components plus EditorCanvas
2024-05-01 11:15:27 +01:00
3a17656d88 Add InnerEditor component that fetches post and template 2024-05-01 11:15:27 +01:00
8c7fadeecf Wait for select all element 2024-05-01 11:08:21 +03:00
ff56eef904 Move page screenshot after submit 2024-05-01 11:08:21 +03:00
c1b19d9c07 Refactor segments select template test 2024-05-01 11:08:21 +03:00
9320d87162 Add wait to helper method 2024-05-01 11:08:21 +03:00
1116c4bb7b Revert timeout limit 2024-05-01 11:08:21 +03:00
d73e973547 Improve step in the newsletter editor tests 2024-05-01 11:08:21 +03:00
6a86656b11 Update selector to aria label and introduce new helper 2024-05-01 11:08:21 +03:00
e1ef9802bc Revert selector change 2024-05-01 11:08:21 +03:00
f5c7371c1c Remove unnecessary waits in other two tests 2024-05-01 11:08:21 +03:00
b7c5732daf Update selector for k6 automation test 2024-05-01 11:08:21 +03:00
9ccb7340e3 Fix acceptance test itCanCreateMailPoetCampaigns
[MAILPOET-6046]
2024-04-30 10:27:12 -05:00
a1bd0db1ea Allow deleted_at to be null 2024-04-30 14:12:08 +02:00
0833f8e75e Remove deleted_at field when restoring newsletter 2024-04-30 14:12:08 +02:00
c246213569 Allow restore from menu 2024-04-30 14:12:08 +02:00
f6a793d2e8 Sync post and newsletter 2024-04-30 14:12:08 +02:00
43752a7e39 Add trash button to email editor 2024-04-30 14:12:08 +02:00
e876da0dc0 Release 4.49.1 2024-04-30 13:44:52 +02:00
7f8a446df6 Fix typo
[MAILPOET-6039]
2024-04-29 10:12:45 +01:00
cbed9d49fc Rename abandoned cart trigger
[MAILPOET-6015]
2024-04-29 11:08:53 +02:00
5aa6ffaed7 Make more triggers transactional
[MAILPOET-6015]
2024-04-29 11:08:53 +02:00
0acb495d0e Remove selector from type argument 2024-04-25 15:34:51 +02:00
f38e3e59b1 Fix missing brackets in the test 2024-04-25 15:34:51 +02:00
601ee19c71 Switch to simple wait for element 2024-04-25 15:34:51 +02:00
08ca0e21ae Refactor acceptance email editor test 2024-04-25 15:34:51 +02:00
76e210ab7c Remove unnecessary clearing fields 2024-04-25 15:34:28 +02:00
2df2ea5544 Add clear fields to segment test 2024-04-25 15:34:28 +02:00
37cbb8a6e9 Update WooCommerce build to latest 2024-04-24 14:53:56 -05:00
edd9b7e0b4 Add new k6 test for forms subscribing 2024-04-24 13:50:10 +01:00
42cc65bda4 Updates tests for subscribeToLists API method
MAILPOET-6023
2024-04-24 12:19:08 +01:00
4d278b5810 Restore trashed subscribers when using public API method subscribeToLists
MAILPOET-6023
2024-04-24 12:19:08 +01:00
e5ee49d249 Fis "A component is changing an uncontrolled input to be controlled"
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
67bf947ec1 Fix "rows per page" not being displayed correcty
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
811a4efe29 Fix flaky listing action selection
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
5aa531c64a Fix flaky automation test
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
fd5cecfa0a Remove no longer needed automation tab focus logic
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
39b0128dc8 Fix casing of bulk actions label
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
bd6e53251e Abort requests when quickly changing listing query
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
88a2abf24e Properly handle loading vs empty states
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
d0f928c00f Add a way to abort mailpoet ajax requests
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
c4bfc02d1d Unify segment listing notices with automation listing
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
b2186232a9 Unify automation name styles with segments
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
d9c60ea5f2 Unify automation actions styles with segments
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
832eee8616 Improve spacing and display on smaller screens
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
3ff4c46a17 Split date & time display in two lines
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
249588c2f2 Remove additional paddings added by paragprahs
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
87af148a06 Add missing border
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
3d3e905006 Make automation-specific listing styles a generic
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
65efa03296 Make automation-specific more button style a generic listing style
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
5d1146434e Debounce segment listing search field
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
74d2699905 Use real number of segments for table placeholder
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
98280e6b0c Do not duplicate segments query in store and URL
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
1cfb1e7f6e Use Intl.ListFormat to format lists
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
ecec657fbc Fix types for confirmation dialog
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
0286535a5b Fix invalid combination of href and disabled props
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
1a99972972 Fix spacing for segment description
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
d3980b700b Fix listing header spacing
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
335e28a127 Use PageHeader component
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
8658ca11f6 Convert duplicate segment method to use await
MAILPOET-5395
2024-04-24 12:59:37 +02:00
d429f538af Convert bulk action to await
MAILPOET-5395
2024-04-24 12:59:37 +02:00
9a8d6de626 Convert segment fetching to await
MAILPOET-5395
2024-04-24 12:59:37 +02:00
e2ea09e830 Improve readability of plural confirmation messages
MAILPOET-5395
2024-04-24 12:59:37 +02:00
0de9389f92 Make padding consistent with automations listing
MAILPOET-5395
2024-04-24 12:59:37 +02:00
b73ea6677a Restore styles that weren't moved over
MAILPOET-5395
2024-04-24 12:59:37 +02:00
d3c0f6904e Remove style causing inconsistent padding
MAILPOET-5395
2024-04-24 12:59:37 +02:00
6675a616b5 Display proper notices for segment actions
This updates some of the segment listing messages to include the name of
 the segment to avoid confusion, and allows for the possibility that
 bulk actions will work for some segments but not all, in which case we
 need to show both success and error messages.

MAILPOET-5395
2024-04-24 12:59:37 +02:00
28ca417261 Fix link casing and remove no longer needed check
MAILPOET-5395
2024-04-24 12:59:37 +02:00
bcde8bdd51 Fix other selector issues in segment tests
MAILPOET-5395
2024-04-24 12:59:37 +02:00
748b9c0009 Fix ManageWooCommerceSegmentsCest selector issues
MAILPOET-5395
2024-04-24 12:59:37 +02:00
913074888f Fix ManageSegmentsCest selector issues
MAILPOET-5395
2024-04-24 12:59:37 +02:00
8ff15f2b26 Add automation id for select all checkbox
MAILPOET-5395
2024-04-24 12:59:37 +02:00
b0e9099b91 Refactor getTabFromLocation to use regex
MAILPOET-5395
2024-04-24 12:59:37 +02:00
d5eb3db2c2 Reload dynamic segments after save
MAILPOET-5395
2024-04-24 12:59:37 +02:00
a8a0e11ac2 Fix plugin missing state
MAILPOET-5395
2024-04-24 12:59:37 +02:00
a5a51f7cd8 Refactor updateDynamicQueryFromLocation
MAILPOET-5395
2024-04-24 12:59:37 +02:00
9449b46441 Fix acceptance tests
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
501f240563 Apply prettier 2024-04-24 12:59:37 +02:00
f3685bcb8d Styling of Dynamic Segment Listing
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
2945f49944 Use wordpress/components for search and select
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
9b7049140e Add value to search field
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
548faea3bc Use ConfirmDialog instead of Modal
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
2906b59d42 Bring default limit to 25
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
789cc31bcb Remove old listing
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
ea0876d4ef Ensure integer query values are in the correct format
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
5f86c0b123 Add duplicate action
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
54be3e7840 Add row actions
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
752855b5a8 Separate bulk action and action modal
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
77e1b9c324 Add notices and remove useless wrapper
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
2917b4ff53 Introduce Bulk Actions
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
dc5674dead Add select all functionality
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
929fab6f8c Add store to select and unselect segments
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
7c1c831f10 Use count to determine the total found rows
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
36975d9fa0 Add search bar
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
982af4872c Improve naming of tabs and content elements
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
baf9fa0dff Read state from URL and write state to URL
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
05a3033698 Update query always when no query is currently stored
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
18cb7c6398 Set offset to 0 when switching tab
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
48e120c52b Seperate listing tables and tabs
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
767aa4f46a Enable sorting and pagination
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
2a1797d2c5 Add basic functionality of the new dynamic segments listing table
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
8281438ba6 Implement temporary way to get dynamic segments
This will be used to populate the new dynamic segments table in the
listing page. It will need to be updated in the future as currently all
the parameters are hardcoded and I'm not sure if I'm doing things the
React way here.

[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
21cef7a713 Implement new design of the header of the segment listing page
[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
a2832c25e5 Add option to <TopBar> to hide screen options
Doing this to avoid having to call <TopBarWithBeamer /> and
<HideScreenOptions /> separately. Will be used in the new design of the
segments listing page.

[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
edadbe1c19 Use WP i18n functions for the segment listing page
This commit improves the segment listing page by using WP i18n functions
instead of MP i18n functions. One string was deleted as it is not part
of the new design that will be implemented in subsequent commits and it
was not following i18n best practices.

[MAILPOET-5395]
2024-04-24 12:59:37 +02:00
9e96a5877f Release 4.49.0 2024-04-23 18:35:09 +03:00
008d42e333 Re-add deepmerge 2024-04-22 12:43:17 +01:00
5e87ddc53d Revert pnpm 2024-04-22 12:43:17 +01:00
d90e4dc962 Fix element styles and scrollbars 2024-04-22 12:43:17 +01:00
3e8105d9fa Fix column height in sidebar 2024-04-22 12:43:17 +01:00
d3f2376857 Set type for QA 2024-04-22 12:43:17 +01:00
8ae1ccbbe7 Use Setting 2024-04-22 12:43:17 +01:00
2a633bdcbf Fix fontFamilies error 2024-04-22 12:43:17 +01:00
b058880b83 font size typo 2024-04-22 12:43:17 +01:00
05fe64d8f9 testItRendersFontSize 2024-04-22 12:43:17 +01:00
1e5ec13403 Ensure typography has value 2024-04-22 12:43:17 +01:00
c4313fd775 Fix appearance update 2024-04-22 12:43:17 +01:00
587a59e842 remove inherited size from buttons 2024-04-22 12:43:17 +01:00
25c461be4e Reuse TypographyProperties 2024-04-22 12:43:17 +01:00
11f9f46b98 remove textdomain from generic strings 2024-04-22 12:43:17 +01:00
7ac23bcfdb Remove default sizing 2024-04-22 12:43:17 +01:00
1d4178bcfa Fix merge error on first load 2024-04-22 12:43:17 +01:00
1220641417 Adjust font size tests 2024-04-22 12:43:17 +01:00
8b58bfd352 Fix background property type 2024-04-22 12:43:17 +01:00
9bc5e1ec0c QA 2024-04-22 12:43:17 +01:00
aa87d3efc4 Fix padding parsing 2024-04-22 12:43:17 +01:00
af92fd9af3 Fix styles in preview 2024-04-22 12:43:17 +01:00
67cbfe9656 Type panels fully functional, with previews 2024-04-22 12:43:17 +01:00
a8e9b167cb Work on tool panels 2024-04-22 12:43:17 +01:00
35b3cd4737 Panel Navigation 2024-04-22 12:43:17 +01:00
ea7b75702b Introduce useEmailStyles hook 2024-04-22 12:43:17 +01:00
4e730bae24 Organise screens and panels 2024-04-22 12:43:17 +01:00
78160ae329 Update testing email template
[MAILPOET-5971]
2024-04-22 10:32:47 +02:00
52c6f698c9 Add WP CLI command for creating testing email template
[MAILPOET-5971]
2024-04-22 10:32:47 +02:00
26896d3cb7 Move email default content to NewsletterSaveController
To avoid circular reference I moved default content to NewsletterSaveController.
[MAILPOET-5971]
2024-04-22 10:32:47 +02:00
14ed910f80 Fix rendering of multiple enum filter values
While "enum" field can have only one value (and "enum_array" multiple),
both can have multiple filtering values set up, so both need to be able to render lists.

[MAILPOET-5944]
2024-04-22 10:19:26 +02:00
c3b9d7c31b Add a test for "mailpoet_segment_subscribed" hook being triggered
[MAILPOET-5992]
2024-04-22 10:16:19 +02:00
f5cc42d2e3 Trigger "mailpoet_segment_subscribed" hook when globally subscribed via admin
[MAILPOET-5992]
2024-04-22 10:16:19 +02:00
6dc6431593 Add meta to withSendingQueue method
[MAILPOET-5629]
2024-04-22 10:06:12 +02:00
630b633eed Move campaign data in own class 2024-04-22 10:06:12 +02:00
5793f27c78 Ensure correct values for sentToSegment
MAILPOET-5629
2024-04-22 10:06:12 +02:00
19d78272a4 Ensure correct counting for same campaign ID
If the same campaign is sent multiple times over an extended period of
time, we need to ensure we consider the processed_at for all associated
sending queues.

MAILPOET-5629
2024-04-22 10:06:12 +02:00
ba4e54f261 Move query to SendingQueuesRepository
The main piece of data we care about is the campaignId, which is saved
in the sending queue's meta, so I think it makes more sense to base the
query on the sending queues as opposed to newsletters.

MAILPOET-5629
2024-04-22 10:06:12 +02:00
9d88f9abee Use consistent date for query
MAILPOET-5629
2024-04-22 10:06:12 +02:00
d513961bad Ues consistent dates
MAILPOET-5629
2024-04-22 10:06:12 +02:00
57209cbc0b Remove automations segments details for now
Determining if an automation was sent to/filtered by a segment is much
more complicated than the rest of this data and might require some
changes on the automations side for efficiency, so I think it would be
best to hold off on these for now and we can figure it all out together
when we update the reporting to include other automation data like
trigger filters.

MAILPOET-5629
2024-04-22 10:06:12 +02:00
401fa92f2c Move calculation of sentToSegment to query
MAILPOET-5629
2024-04-22 10:06:12 +02:00
a747c98c19 Move date calculation to query
MAILPOET-5629
2024-04-22 10:06:12 +02:00
da9fd9dd26 Add new campaign analytics to reporter
MAILPOET-5629
2024-04-22 10:06:12 +02:00
cc11ab25aa Add campaign analytics logic
MAILPOET-5629
2024-04-22 10:06:12 +02:00
c8a90760e6 Add 7 day sending stat
MAILPOET-5629
2024-04-22 10:06:12 +02:00
286c167c01 Revert docker compose and update k6 docker compose 2024-04-19 09:15:55 +02:00
9c5033b5ff Update docker compose with newer PHP 2024-04-19 09:15:55 +02:00
8b1f9d52e4 Update stage tag 2024-04-19 09:15:55 +02:00
b188add536 Fix PHP 8.1 error: Implicit incompatible float to int conversion is deprecated
[MAILPOET-6003]
2024-04-19 09:15:55 +02:00
e7e7097dcf Switch to Woo 8.8.0-rc.1 2024-04-19 09:15:55 +02:00
2824750b5d Update circle ci config 2024-04-19 09:15:55 +02:00
dcfcef3bb0 Update docker entrypoint 2024-04-19 09:15:55 +02:00
d77f6b08ca Switch to Woo 8.6.0 2024-04-19 09:15:55 +02:00
532de4d0cb Refactor tests that are false positive 2024-04-19 09:15:55 +02:00
fd3bca1efd Fix PHP 8.1 error: strlen() Passing null to parameter #1 ($string) of type string is deprecated
[MAILPOET-6003]
2024-04-19 09:15:55 +02:00
00cdde82bd Test against latest 8.8.0-rc.1 2024-04-19 09:15:55 +02:00
5331681b83 Switch to Woo Core 8.6.0 2024-04-19 09:15:55 +02:00
6c03abe477 Update all places with new WP 6.5
[MAILPOET-6003]
2024-04-19 09:15:55 +02:00
f45ecefc22 Add User-Agent header into command downloading plugins 2024-04-18 15:54:30 +01:00
0eeb74b58c Add context to removing notices
After refactoring are notices created in the context 'email-editor', but calling removing notices were not updated.
[MAILPOET-6007]
2024-04-18 12:51:39 +02:00
4f7268e364 Use sprintf for inserting styles into text block HTML template
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
13c73b781b Remove unnecessary table wrap for outlook for text blocks
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
b8396140ac Remove paragraph renderer
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
fd04141141 Use Text renderer also for paragraph block
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
d49f3e8988 Rename Heading renderer to Text renderer
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
c52937202e Polish Heading block renderer code
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
057de1d2e7 Use a first tag from heading block rendered content
The block has only one HTML element, so we don't need to explicitly ask for a heading.
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
9873634f1e Use inherit value as a fix for font-size defined via clamp
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
d56cf24a7c Fix regular expression for removing padding in the heading block
The problem was that \padding.*:\ would eat much more than just one padding rule.
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
47a4871600 Remove unused SettingsController::convertStylesToString method
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
15e0c3fa4d Use WP's style engine for formatting style arrays to string
[MAILPOET-5798]
2024-04-18 12:45:15 +02:00
50df6c3d4e Use NPS poll in the new email editor
[MAILPOET-5911]
2024-04-15 08:18:35 +02:00
76ad24f71d Add email editor poll id
[MAILPOET-5911]
2024-04-15 08:18:35 +02:00
64dd11d305 Add new k6 test and update existing
[MAILPOET-5875]
2024-04-11 09:32:12 +03:00
e1f5e882fe Prevent double registration of block types 2024-04-10 11:42:50 +02:00
6f5de68a9f initialize block types controller elsewhere 2024-04-10 11:42:50 +02:00
c267b82035 Remove renderCallback 2024-04-10 11:42:50 +02:00
3f2b96f3a6 Introduce block to handle email content 2024-04-10 11:42:50 +02:00
37e901c809 Restore content renderer styles to fix remaining tests 2024-04-10 11:42:50 +02:00
02b8a4ad78 Force content render 2024-04-10 11:42:50 +02:00
7325785e6b Add ID to emailPost 2024-04-10 11:42:50 +02:00
fa73d97ae9 Mock getEmailStyles 2024-04-10 11:42:50 +02:00
26246cd202 Return Meta robots + subject 2024-04-10 11:42:50 +02:00
ab893062ae Default colors 2024-04-10 11:42:50 +02:00
3ec36064ab Fix undefined spacing warning 2024-04-10 11:42:50 +02:00
b25335c2cb Update spacing tests 2024-04-10 11:42:50 +02:00
0b2e88df9a Outlook spacing 2024-04-10 11:42:50 +02:00
2060b68583 Handle spacing using consistent spacing element 2024-04-10 11:42:50 +02:00
f79f3a00c4 Remove kses 2024-04-10 11:42:50 +02:00
560495c40d Restore testItCallsPreprocessorsProperly test 2024-04-10 11:42:50 +02:00
1e499a0ce7 Fix trailing comma 2024-04-10 11:42:50 +02:00
a697b32e0e Exclude from phpstan 2024-04-10 11:42:50 +02:00
e0d27db790 Remove top level processor in favour of wrapping column in template, fix column padding 2024-04-10 11:42:50 +02:00
b4acac7c52 Refactor renderers to use templates 2024-04-10 11:42:50 +02:00
888be622e2 Add main template canvas and consolodate styles 2024-04-10 11:42:50 +02:00
0cd85dc1b3 Utility class to get template from file system 2024-04-10 11:42:50 +02:00
1450c5ccaa Refactor re engagement test with waitAndType
[MAILPOET-6005]
2024-04-09 12:42:01 -05:00
9dd42d922e Release 4.48.2 2024-04-09 09:06:38 -05:00
6b9db7b9ca Add new k6 performance test for re-engagement email
[MAILPOET-5870]
2024-04-08 14:13:47 +02:00
42ef14db87 Add promise to click 2024-04-08 13:31:25 +02:00
ddd88cd0bd Improve another test to avoid false positives 2024-04-08 13:31:25 +02:00
a0d64793aa Update k6 and improve existing analytics test
[MAILPOET-6004]
2024-04-08 13:31:25 +02:00
7dd1cd213b Cast args to expected types to catch type errors in the future
[MAILPOET-6000]
2024-04-08 12:55:54 +02:00
677c6f22ee Fix loading order in customer payload for guest users
We were passing order ID istead of the order itself for guest users.

[MAILPOET-6000]
2024-04-08 12:55:54 +02:00
4c44403f6c Fix checking whether an email should contain an abandoned cart block
The problem with the current conditions is that when any of these options doesn't
exist at all, the condition will not pass (= it will render the block, but it shouldn't).

[MAILPOET-5999]
2024-04-08 12:27:53 +02:00
fc03639aff Add using List-Unsubscribe-Post header to PHPMailerMethod
[MAILPOET-5983]
2024-04-08 11:12:59 +02:00
5bcc77765c Release 4.48.1 2024-04-04 16:21:35 +02:00
5b31cbe274 Improve check in the test 2024-04-03 16:26:16 +03:00
45a38d63e5 Include closing modal 2024-04-03 16:26:16 +03:00
2bcda7998a Update comments 2024-04-03 16:26:16 +03:00
06f4752eb8 Add k6 test for post notification 2024-04-03 16:26:16 +03:00
0fc6f40764 Fix W3C standard violation
Reported in https://wordpress.org/support/topic/w3c-standard-violation/#post-17543406.

[MAILPOET-5993]
2024-04-03 10:47:01 +02:00
02c1d3cc91 Fix prices
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
029daca416 Update billing on purchase links with billing selection
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
762916910b Add escaping with localization
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
5b84f3338f Add new groups to purchase links
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
169f5958f8 Add 2024 param to shop links
for upgrades and purchases to distinguish the product type.

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
4a467ff678 Use paragraphs instead of line break
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
baa73971c1 Add pro plan tooltips
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
9511ce51bd Add basic plan tooltips
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
27b685d950 Add missing alt attribute
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
5a4dd5e489 Add free plan tooltips
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
eac3ebdad3 Update tracking events names
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
2448873458 Track shop link click and fix email
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
12770d40b5 Add buttons to hero in footer
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
9d01358b58 Add hero section in footer
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
079337c49c Move hero section css to a separate file
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
52454e29f0 Add tier features
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
1da618d921 Fix label line-height
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
bc114d3e8c Show divider instead of button for lower plans
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
571fb48889 Show Your current plan button
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
fb1608a5d5 Show upgrade or purchase button
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
6a3578f93d Show price based on billing selection
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
bb1665f495 Add yearly price
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
707d5723cb Add description to toggle
and update based on selection

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
4271f9a7b3 Adjust toggle to page
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
1fadda7e11 Add billing toggle
This is a copy of the one in the shop with the colors, font-size and labels adjusted.

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
9cb463a630 Add min-height to tier header
to keep the alignment after the copy changed

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
3e0039e05f Add monthly prices
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
c3acb37201 Add product icons
business and starter are the same icon in the figma file

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
60dd2b2626 Add product header
with title and description

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
ea2ce46591 Add label
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
c9267a7231 Add tiers structure
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
52f3bcd082 Add container with caption for products
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
a010025d66 Add top hero section
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
e4b90d7e38 Add logic to display new upgrade page
that will have to be modified after results from a/b test

[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
17d1b08f72 Add new empty upgrade page
[MAILPOET-5906]
2024-04-03 08:40:46 +03:00
01c4cf96a1 Fix flaky performance test automation trigger workflow
[MAILPOET-5990]
2024-04-02 14:11:08 -05:00
32df151777 Remove starter plan mention 2024-03-29 15:07:45 +01:00
13a31d8790 Update readme.txt info
[MAILPOET-5916]
2024-03-29 15:30:59 +02:00
c9b49670e7 Add new email editor tests to allowed to skip list
[MAILPOET-5987]
2024-03-28 16:40:51 +01:00
750135c690 Add skipping new email editor acceptance test on WP 6.3
[MAILPOET-5987]
2024-03-28 16:40:51 +01:00
6dd293b638 Create new tags when user leaves input field
[MAILPOET-5731]
2024-03-28 13:52:37 +01:00
872064bf00 Switch xpath to num click due to issue in locator 2024-03-26 18:03:56 +01:00
a66c9b8974 Include WooCommerce plugin, refactor Onboarding and add to scenarios 2024-03-26 18:03:56 +01:00
3697f1f4be Add new k6 perf test for WooCommerce
[MAILPOET-5868]
2024-03-26 18:03:56 +01:00
cbff461b4d Display upgrade page if no valid premium key
[MAILPOET-5905]
2024-03-25 12:36:08 +01:00
724681d3a7 Display upgrade page for Tier 1
[MAILPOET-5905]
2024-03-25 12:36:08 +01:00
9e13d4197c Release 4.48.0 2024-03-25 12:21:41 +01:00
05124fc6c1 Remove redundant use statement 2024-03-25 12:11:11 +01:00
2c98fc4323 Code styling 2024-03-25 12:11:11 +01:00
5085fee15d Update color selectors 2024-03-25 12:11:11 +01:00
a5f177c7e4 Spacing 2024-03-25 12:11:11 +01:00
fc384424ac Update tests to reflect markup changes 2024-03-25 12:11:11 +01:00
2f888daca5 Fix rendering and include shared logic 2024-03-25 12:11:11 +01:00
9a705a4394 Refactor button styling 2024-03-25 12:11:11 +01:00
a70660dfc3 Fix ordering used classes after rebase
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
685796f310 Remove redundant property theme
Because we can write and read meta field directly, we don't need our own implementation.
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
4dbac6ef62 Move email styles merge to engine
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
cae2ad6dc7 Move meta registration to the engine
As a part of the refactoring is making the meta field available via API.
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
b8a470512b Change template slug in block-editor
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
c6ec2761d1 Replace @ts-ignore with @ts-expects errors in the email editor
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
b4bf9c7476 Use VariablesPostprocessor in Renderer
Because the layout wrapper HTML is not post-processed after moving content rendering, I needed to use VariablesPostprocessor because padding can be configured by a CSS variable.
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
4c0c5c1583 Duplicate email post meta and update tests
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
4c3f86e552 Update integration tests
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
a0c1a87e81 Remove redundant code
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
eb2ae0c268 Update email theme via dimensions-panel
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
95f3766b4d Add theme styles component for email editor
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
1828f16273 Add private-api package
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
11adf6c324 Pass email editor theme to the state
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
be4f517d39 Add theme metadata to mailpoet_email post
[MAILPOET-5640]
2024-03-22 17:19:44 +01:00
4050127a29 Add a note about rendering issues
[MAILPOET-5945]
2024-03-22 15:46:57 +01:00
fea141d1bd Fix rendering of columns width
[MAILPOET-5945]
2024-03-22 15:46:57 +01:00
647926734f Bump follow-redirects from 1.15.5 to 1.15.6
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.5 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-22 14:34:39 +01:00
6f3e3153f0 Revert accidental reformatting of performance tests
Caused by: https://github.com/mailpoet/mailpoet/pull/5503

[MAILPOET-5946]
2024-03-22 12:50:15 +01:00
0395d3cf46 Add check that last_subscribed_at is not empty
[MAILPOET-5894]
2024-03-22 11:09:42 +01:00
fc3d0ea439 Add last_subscribed_at in getSubscribers() response to MP API docs
[MAILPOET-5894]
2024-03-22 11:09:42 +01:00
4f3cb670ef Use lastSubscribedAt instead of createdAt in subscribers listing
[MAILPOET-5894]
2024-03-22 11:09:42 +01:00
423ce62100 Add lastSubscribedAt to the subscribers API response
[MAILPOET-5894]
2024-03-22 11:09:42 +01:00
f96e6b83d6 Also show upgrade message and link if key is valid without premium
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
28b67db92b Remove unused placeholders
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
668d7c306f Make link consistent with newsletters premium banner
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
c3e12f8aff Remove code that is never reached
If the limit is reached, window.mailpoet_display_detailed_stats is false

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
3fa4930da3 Update translations
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
48d85708b2 Update premium banner for detailed stats to handle capabilities
and refactor to use the same as the newsletter detailed stats

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
48465a7152 Refactor CapabilitiesManager
capabilities is an associate array of new class Capability  to make it more generic

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
b6720bbf26 Update the upgrade modal for adding segment filters
and show the lock when over the number of filters limit

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
598591f71f Update premium banner to handle capabilities
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
03abb1b4d5 Refactor capabilities
Make type more generic and move check to capabilities class

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
5d267b1a41 Update the upgrade modal msg for automation steps
And handle numeric capabilities

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
020aee53aa Update the upgrade modal msg for detailed analytics in automations
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
088a1ad801 Add capability data on automation analytics date range modal
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
2ef929fefa Add capability msg on automation analytics modal
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
f7de6e645f Add capability msg on automation analytics banner
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
6919f39593 Add option to add params to upgrade URL
[MAILPOET-5938]
2024-03-22 11:01:01 +01:00
85aec1ad77 Update banner in plugin
[MAILPOET-5974]
2024-03-22 10:48:01 +01:00
1967b5a09c Update readme.txt
[MAILPOET-5973]
2024-03-22 10:48:01 +01:00
d336262b31 Spacing 2024-03-21 16:57:59 +01:00
6f1a8fb374 Fix minimal standard in composer 2024-03-21 16:57:59 +01:00
0d6fe6e5eb Apply rules to tests and tasks 2024-03-21 16:57:59 +01:00
435f638011 Apply rules on lib dir 2024-03-21 16:57:59 +01:00
35fbac6320 Update rules to include correct spacing around arrays and closures. 2024-03-21 16:57:59 +01:00
2212869800 Update sniff packages 2024-03-21 16:57:59 +01:00
5ec6cc1280 Update the woo version in test jobs for the oldest supported versions.
[MAILPOET-5962]
2024-03-20 13:08:43 +01:00
94c96e3174 Update Woo required and tested up to versions after 8.7.0 release
[MAILPOET-5962]
2024-03-20 13:08:43 +01:00
3c4b55a460 Remove @types/wordpress__notices 2024-03-20 11:05:25 +01:00
d0a7d3d6f5 rename context 2024-03-20 11:05:25 +01:00
ccf18a8cec Remove unwanted code comment 2024-03-20 11:05:25 +01:00
6449b63c8b Refactor into hooks 2024-03-20 11:05:25 +01:00
e7bb52833a Debounced content validation 2024-03-20 11:05:25 +01:00
e5573e9176 Update messaging when email cannot be saved 2024-03-20 11:05:25 +01:00
cbb60d4f81 Initial notice subscription 2024-03-20 11:05:25 +01:00
2c43b23803 Update mailpoet/lib/AdminPages/Pages/EmailEditor.php
Co-authored-by: Jan Lysý <lysyjan@users.noreply.github.com>
2024-03-20 10:57:26 +01:00
bbd45a5f32 Remove script tags from wpAddInlineScript 2024-03-20 10:57:26 +01:00
fab5ff650d Fix syntax error after rebase 2024-03-20 10:57:26 +01:00
36c982a0d1 Correct indenting 2024-03-20 10:57:26 +01:00
9cbe58f95f Template no longer needed 2024-03-20 10:57:26 +01:00
2a830b9f68 Add globals for the premium modal 2024-03-20 10:57:26 +01:00
8f81f4a6b1 Use page renderer 2024-03-20 10:57:26 +01:00
a1b146a2ec Remove trailing comma 2024-03-20 10:57:26 +01:00
33cb92a779 Conditionally show footer 2024-03-20 10:57:26 +01:00
762b050e85 Alternative footer logo 2024-03-20 10:57:26 +01:00
30c6bc5ad1 Styling 2024-03-20 10:57:26 +01:00
3fdac58cfd Add image to CDN and canvas 2024-03-20 10:57:26 +01:00
72543d1971 Fix typo and add text-domain
[MAILPOET-5733]
2024-03-20 07:48:56 +01:00
4c3e6b8cb1 Release 4.47.0 2024-03-19 14:28:34 +01:00
74f239c372 Temporary switch to Woo 8.6.1
[MAILPOET-5955]
2024-03-18 17:12:05 +01:00
f1459c48cc Document ./do command 2024-03-18 17:00:49 +01:00
df50d9526b Document feature flags 2024-03-18 17:00:49 +01:00
60bf440bff Add check that updatedAt is set
[MAILPOET-5860]
2024-03-18 08:55:44 -05:00
7df37c88f6 Apply "in the last X" parameter to fields backfilled from orders for guests
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
29083b1f0f Ensure expected field types in customer payload
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
4e42c39486 Add test for tags & categories backfilling
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
c3e4264d4d Add test for order date fields backfilling
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
cad1e9e8a1 Add test for order stats fields backfilling
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
593d227d8e Add test for billing & shipping info backfilling
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
efb56c7469 Pass order ID to customer subject from order-related triggers
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
e054d455d4 Pass order to customer payload when available
[PREMIUM-253]
2024-03-18 13:36:08 +01:00
516d719111 Fallback on order categories/tags in order fields
[MAILPOET-5378]
2024-03-18 13:36:08 +01:00
4b1027fcc7 Fallback on order date in first/last order date fields
[MAILPOET-5378]
2024-03-18 13:36:08 +01:00
bae1f44378 Use the new getters in field value factories
[MAILPOET-5378]
2024-03-18 13:36:08 +01:00
950747a15f Add getters for total spent, average spent, and order count with order fallback
[MAILPOET-5378]
2024-03-18 13:36:08 +01:00
b6c81f8ff6 Add getters for billing & shipping customer data with order fallback
[MAILPOET-5378]
2024-03-18 13:36:08 +01:00
adb5d16fab Allow optional WC_Order to customer payload for guest user data
[MAILPOET-5378]
2024-03-18 13:36:08 +01:00
91ba2dc89d Refactor forms column block to container queries
[MAILPOET-5917]
2024-03-18 12:17:37 +01:00
8ba4335dfb Optimize and cache term loading
[MAILPOET-5942]
2024-03-18 11:53:16 +01:00
6f87dd6b01 Move layout background colors to theme.json
[MAILPOET-5640]
2024-03-15 16:57:41 +01:00
2ea6bca7a3 Update renderer integration test
[MAILPOET-5640]
2024-03-15 16:57:41 +01:00
60204c11cc Update getting values for styles preview
[MAILPOET-5640]
2024-03-15 16:57:41 +01:00
6181d8a683 Change default values for block gap and padding
[MAILPOET-5640]
2024-03-15 16:57:41 +01:00
5ceef236bf Use the same format for styles as it is in theme.json
This should be the first step to using theme.json format in DB and merging more style configurations to the final one.
[MAILPOET-5640]
2024-03-15 16:57:41 +01:00
c415f1efce Move heading styles from CSS file to theme.json
Because we want to have all editor configurations in theme.json, I moved heading font sized to theme.json and removed redundant filters.
[MAILPOET-5640]
2024-03-15 16:57:41 +01:00
15b0846f34 Leave on-save email validation only in SubscriberSaveController
[MAILPOET-5878]
2024-03-15 15:29:36 +01:00
5d781f3f7f Fix popover in automation template modal opening behind the modal
[MAILPOET-5953]
2024-03-15 15:00:13 +01:00
f640fb58ef Use a smaller bottom margin for the canvas to prevent hidden inserter popup
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
9f6fa6e47d Disable unwanted focus outline on buttons in sidebar
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
3bbb7b71a1 Fix border radius issues in the button
When only the radius was defined, we set border solid and it caused
that sometimes it was rendered even when the width was not defined.
Overflow hidden ensures that inner link element doesn't break the border radius.
[MAILPOET-5907
2024-03-15 14:43:01 +01:00
46f94e0901 Ensure correct display when switching mobile/desktop preview
useResizeCanvas hook started to return some values for margin, but only after the switch happened and
they were breaking margins
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
619446051d Fix the padding issue in the preview dropdown menu
The preview in the new tab button had a different padding.
[MALPOET-5907]
2024-03-15 14:43:01 +01:00
b9ef6bb258 Add a workaround for fixed toolbar backward compatibility
In WP 6.4 and below is the fixed toolbar rendered within the same
slot as the floating toolbar but is positioned via CSS.

In WP 6.5, the fixed toolbar needs to be rendered in the Header explicitly.
This commit adds a workaround to backward compatibility with WP 6.4 to prevent rendering
two fixed toolbars.

Inspired by 1abf85fb83
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
055e841c03 Add fixed block toolbar collapse toggle
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
5083ad8342 Add fixed block toolbar support for WP 6.5
The fixed toolbar used to be just an absolutely positioned toolbar.
After the recent changes, we need to render it ourselves.
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
2e795f09df Disable shadow for all blocks
The shadow is currently not opt-in and can't be disabled in theme.json
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
ab35ac7925 Fix sidebar tabs appearance for WP 6.5
I explored using the private Tabs component and it worked, but it
doesn't work with WP 6.4 so I went with adding CSS.
We can switch to Tabs later. Hopefully they won't be private.
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
6fe8bc5432 Fix desktop email content view
The condition stopped working because useResizeCanvas started returning
some styles also for Desktop
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
06ae808295 Fix the left header toolbar appearance
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
4d4be7b9d0 Remove unnecessary className
The class name is added automatically. Adding it explicitly causes a duplicity.
[MAILPOET-5907]
2024-03-15 14:43:01 +01:00
9a75b7d92d Add test
[MAILPOET-5939]
2024-03-15 13:18:01 +01:00
bb84e1fc03 Add GA params only when tracking is set
[MAILPOET-5939]
2024-03-15 13:18:01 +01:00
39aa76d4d0 Improve typehints and use typed properties in ContentRenderer and test
[MAILPOET-5798]
2024-03-15 10:28:48 +01:00
4071175178 Move ContentRenderer to the Renderer/ContentRenderer namespace
[MAILPOET-5798]
2024-03-15 10:28:48 +01:00
da87807330 Split CSS for inlining to a file for content and for the HTML template
This is a continuation of the idea of separating content rendering
and adding content to the HTML template.
I assume that in the future, we may move more parts from the renderer
to the content render (e.g. we may introduce a block for layout wrap).
[MAILPOET-5798]
2024-03-15 10:28:48 +01:00
8f20b4bfa9 Simplify code in RendererTest using WP_HTML_Tag_Processor
[MAILPOET-5798]
2024-03-15 10:28:48 +01:00
8b09fd6183 Add basic integration test for ContentRenderer
[MAILPOET-5798]
2024-03-15 10:28:48 +01:00
2c5857e89b Split renderer into content renderer and renderer
Content renderer - renders the content of the email post
Renderer - places the content into the email HTML template and generates text version
[MAILPOET-5798]
2024-03-15 10:28:48 +01:00
c7a75a897b Rebase onto trunk and update expector 2024-03-15 08:20:00 +01:00
099ea279bd Add new k6 test to cover automation triggering workflow 2024-03-15 08:20:00 +01:00
ef00c8dadf Update mailpoet_shortcode_links type
[MAILPOET-5889]
2024-03-14 19:14:21 +01:00
42f929fba3 Display Premium Banner if key is not valid
and move Products Sold Tab to free plugin for consistency.

[MAILPOET-5889]
2024-03-14 19:14:21 +01:00
9bfa20d345 Use ts-expects error instead of ignore and remove domain from common translations
[MAILPOET-5640]
2024-03-14 12:53:32 +01:00
0abadb3f92 Add dimension panel for layout styles configuration
At this moment, it's only UI component that does not contain any callbacks.
[MAILPOET-5640]
2024-03-14 12:53:32 +01:00
5c46bbda30 Add layout screen component
Each section of styles in the sidebar should have its screen component.
[MAILPOET-5640]
2024-03-14 12:53:32 +01:00
97d31c0dbf Add screen header component
[MAILPOET-5640]
2024-03-14 12:53:32 +01:00
165c3eb6b7 Fix typos, unify casing
[MAILPOET-5936]
2024-03-14 11:09:12 +01:00
1b73d6b143 Unify automation icon sizes
[MAILPOET-5936]
2024-03-14 11:09:12 +01:00
b234fdf55d Fix label style for delay step settings
[MAILPOET-5936]
2024-03-14 11:09:12 +01:00
c8c4d861c7 Add missing label for abandoned cart delay
[MAILPOET-5936]
2024-03-14 11:09:12 +01:00
3972a4d7e7 Remove automations beta badge
[MAILPOET-5936]
2024-03-14 11:09:12 +01:00
c2ed2c1847 Fix if/else branch artifact when scaled or zoomed
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
0c3eee9a57 Fix rendering of if/else conditions in template previews
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
eaee987048 Implement cart total field
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
7560aa495e Unify quotes and apostrophes
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
4674c1443d Use order completed trigger instead of status change
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
261907e93b Add missing translation functions
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
ad1ffea2c0 Enable abandoned cart campaign template
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
9be4e730c0 Add win-back customers template
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
d816e97d31 Enable thank loyal customers template, improve naming
[MAILPOET-5934]
2024-03-14 11:09:12 +01:00
888df573e5 Apply filter parameters in templates
[MAILPOET-5936]
2024-03-14 11:09:12 +01:00
7c4c825d4e Fix preconditions for detailed analytics
[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
a4aefbc7e7 Handle individual capabilities when there is no tier
[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
f170db9b7d Add css class to conditionally remove the locked icon
[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
d6a66c4b89 Remove duplication and fix condition for logo requirement.
[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
9c9a85d029 Backward compatibility for automationSteps and segmentFilters
[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
727c3ab554 Add capabilities to MailPoet object
They will be used by the premium plugin.

[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
0ca2146801 Add capability check on newsletters detailed stats
Moves existing check to the capability manager and implements backward compatibility for products without capabilities.

[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
e185df3765 Add capability check on logo display
Moves existing check to the capability manager and implements backward compatibility for products without capabilities.

[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
931fae7691 Add basic capabilities manager class
Backwards compatibility will be handled later

[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
165ff19752 Add basic capabilities class
[MAILPOET-5898]
2024-03-13 11:54:37 +01:00
92c35ae98d Update automation analytics test 2024-03-13 11:35:37 +01:00
7933a4aaf8 Stabilize test to eliminate flakiness 2024-03-13 11:35:37 +01:00
1950db9b6d Add new k6 test automation trash restore 2024-03-13 11:35:37 +01:00
4abe0f0564 Remove flaky assesment
[MAILPOET-5941]
2024-03-13 10:51:14 +01:00
21962d9064 Fix variable name
MAILPOET-4985
2024-03-13 10:24:42 +01:00
45dba06b7d Remove old constant
MAILPOET-4985
2024-03-13 10:24:42 +01:00
6d87ecd86d Add usage tracking
MAILPOET-4985
2024-03-13 10:24:42 +01:00
a9140a702e Add backend logic for purchase with tag filter
MAILPOET-4985
2024-03-13 10:24:42 +01:00
82e85db657 Add test helper to create woo tags
MAILPOET-4985
2024-03-13 10:24:42 +01:00
566e1d33f2 Add UI for purchased with tag filter
MAILPOET-4985
2024-03-13 10:24:42 +01:00
3defeec415 Rename tableWidth variable 2024-03-13 10:02:00 +01:00
9e25796d66 IE column widths 2024-03-13 10:02:00 +01:00
89af7a34df Add background support notice 2024-03-13 10:02:00 +01:00
3e8edcdc8f Fix border styles 2024-03-13 10:02:00 +01:00
bc500812ed Remove max width so table fills full width of layout 2024-03-13 10:02:00 +01:00
af53122c32 Unique namespace in enhanceColumnsBlock 2024-03-13 10:02:00 +01:00
a922714154 Correctly set default alignment to stretched 2024-03-13 10:02:00 +01:00
c75367b996 Merge borders to ensure defaults are set 2024-03-13 10:02:00 +01:00
86a9de0df5 Fix extra borders in columns 2024-03-13 10:02:00 +01:00
2d75acfeb1 remove debugging code 2024-03-13 10:02:00 +01:00
e44745109a Attempt to target specific block for column test 2024-03-13 10:02:00 +01:00
f21462d563 Missing is-vertically-aligned-stretch 2024-03-13 10:02:00 +01:00
b91568ed74 Fix invalid block markup 2024-03-13 10:02:00 +01:00
b124210844 Preserve single quotes 2024-03-13 10:02:00 +01:00
44d95d9e6b Fixing tests and adding debug information to show generated HTML 2024-03-13 10:02:00 +01:00
a8ea1d3453 Adjust tests so wrapper has styles 2024-03-13 10:02:00 +01:00
880f157fb0 Update tests due to moving some classnames and styles 2024-03-13 10:02:00 +01:00
69f78e97ce remove some potentially unwanted rules in unit tests 2024-03-13 10:02:00 +01:00
250f4ad929 Tidy markup 2024-03-13 10:02:00 +01:00
27414dfc55 Padding from block styles 2024-03-13 10:02:00 +01:00
c4deea8b48 Add background support for columns 2024-03-13 10:02:00 +01:00
7b4b7c362d Update escape helper to handle and consume esc_attr 2024-03-13 10:02:00 +01:00
3abcb581c9 Add background image support to column/columns 2024-03-13 10:02:00 +01:00
c9289efd96 Rename segments to lists in UI
[MAILPOET-5940]
2024-03-13 09:42:49 +01:00
b30cd0785b Remove escapeHtml when rendering list titles in React
Escaping is not required when rendering titles in react components. HTML is escaped automatically.

[MAILPOET-5842]
2024-03-13 09:38:07 +01:00
1a753ca2af Order explicitly by name
[MAILPOET-5942]
2024-03-12 14:27:21 +01:00
792dcb0664 Release 4.46.0 2024-03-12 13:47:05 +02:00
2bacedc189 Turn off MAILPOET_USE_CDN when running acceptance tests 2024-03-12 11:29:04 +00:00
035f3097ca Move image to CDN 2024-03-12 11:29:04 +00:00
a7780b2c5d Add test to assert that post_content defaults to containing a subscription message 2024-03-12 11:29:04 +00:00
3ad932a17e Define default content blocks 2024-03-12 11:29:04 +00:00
2002f66e15 Add alternative fake logo from designs 2024-03-12 11:29:04 +00:00
970b321de5 Fix border color fallback for button block
When the border color is not set, a block uses text color as a fallback.
This was not working properly for the button block when the font color was picked from the color palette.
This PR fixes the issue and adds the proper border color class.

[MAILPOET-5919]
2024-03-12 08:38:56 +01:00
1eb0c07fed Add border color classes to CSS for the renderer
[MAILPOET-5919]
2024-03-12 08:38:56 +01:00
a2c213c430 Update nightly domain 2024-03-11 23:13:52 +03:00
e10db5415b Add new perf test automation analytics 2024-03-11 23:13:52 +03:00
c557f27ce9 Check for initial limit before initializing.
[MAILPOET-5941]
2024-03-11 15:01:10 +01:00
88e34abe87 Require an attribute_type in validity check
MAILPOET-5467
2024-03-11 10:52:30 +01:00
f297ba0251 Memoize combined options to avoid re-renders
MAILPOET-5467
2024-03-11 10:52:30 +01:00
3888aa4113 Extract attribute values onChange handler
MAILPOET-5467
2024-03-11 10:52:30 +01:00
897daa184f Extract initial attribute values calculation
MAILPOET-5467
2024-03-11 10:52:30 +01:00
1e36b6d999 Don't include attributes with no known values
MAILPOET-5467
2024-03-11 10:52:30 +01:00
56cffdfb59 Refactor attribute option value generation
MAILPOET-5467
2024-03-11 10:52:30 +01:00
4203348340 Refactor attribute value/onChange
This extracts some logic out of the JSX for readability and memoizes
more of the data to avoid unnecessary re-renders

MAILPOET-5467
2024-03-11 10:52:30 +01:00
604de62af6 Add filter data mapper tests
MAILPOET-5467
2024-03-11 10:52:30 +01:00
a4a2ef3b1f Add support for local variation attributes
In WooCommerce it's possible to create attributes that are local to a
specific product. When these attributes are used to generate variations,
 they are stored in the postmeta table.

MAILPOET-5467
2024-03-11 10:52:30 +01:00
24e38d6752 Add explanation of the getLookupData method
MAILPOET-5467
2024-03-11 10:52:30 +01:00
6307cfdcff Add filter data validation
MAILPOET-5467
2024-03-11 10:52:30 +01:00
6b8fc3df83 Only load WC data when WC is active
MAILPOET-5467
2024-03-11 10:52:30 +01:00
fe4621f503 Ensure selected terms appear in dropdown on load
MAILPOET-5467
2024-03-11 10:52:30 +01:00
ac27dc1446 Add tracking for purchased with attribute filter
MAILPOET-5467
2024-03-11 10:52:30 +01:00
bfa3770d99 Add backend logic for purchase by attribute filter
MAILPOET-5467
2024-03-11 10:52:30 +01:00
477557d22c Use taxonomy slug instead of id
The lookup table, wc_product_attributes_lookup, that we'll use for the
queries, includes the slug but not the taxonomy id.

MAILPOET-5467
2024-03-11 10:52:30 +01:00
2e8a757432 Make attribute term ids a multiselect
MAILPOET-5467
2024-03-11 10:52:30 +01:00
acc8dde47d Add purchased with attribute segment UI code
[MAILPOET-5467]
2024-03-11 10:52:30 +01:00
e90f984379 Fix enum filter validation
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
9327485441 Use "comment_date_gmt" for "in the last" condition
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
b5b21c9f7a Add check for product post type when fetching customer review data
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
46a462ee23 Add test for an automation with if/else step and "in the last X days" filter
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
d7f4f1a137 Fix non-translatable strings
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
1d27d51753 Render "in the last X days" in parameter values
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
5439db1e5a Unify parameter naming
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
1a0eb90402 Mark which fields support the "in the last" parameter for UI
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
5f7362282d Add "in the last" parameter and schema to number and enum filters
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
7f63445f5a Pass filter-provided parameters to field value factories
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
467f1f8c8c Add ability for filters to provide field params
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
1e3d6347fc Add validation for "in the last" parameter
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
4637349a60 Implement filter args validation
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
2303a7480c Add filter type defintions, extract value formatting to each of them
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
d0889a436f Add a way to manage filter types in automation editor store
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
7cb75e77c5 Add explicit casts for WordPressDotOrg.sniffs.DirectDB.UnescapedDBParameter
None of these are needed, but the sniff reports them as false positives, so this is a workaround.

[PREMIUM-253]
2024-03-11 10:31:15 +01:00
d4fd0bec71 Check for empty array when getting parent term IDs
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
5b2d75dc1f Add "in the last" parameter to "woocommerce:customer:purchased-tags" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
176b2dbd53 Add "in the last" parameter to "woocommerce:customer:purchased-categories" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
399e61d7b9 Add "in the last" parameter to "woocommerce:customer:review-count" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
d0d9c223b4 Simplify factory in integration tester
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
67786c1eee Add "in the last" parameter to "mailpoet:subscriber:automations-exited" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
44b65d10be Add "in the last" parameter to "mailpoet:subscriber:automations-processing" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
2ef7bf6fac Add "in the last" parameter to "mailpoet:subscriber:automations-entered" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
f1b1ca882c Add "in the last" filter for fetching automation IDs by subject
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
504510d724 Simplify fetching automation IDs by subject
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
f36b117987 Add "in the last" parameter to "mailpoet:subscriber:email-clicked-count" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
1c7ed9602f Add "in the last" parameter to "mailpoet:subscriber:email-machine-opened-count" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
c87fc5ab7e Add "in the last" parameter to "mailpoet:subscriber:email-opened-count" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
2421a1b8ea Add "in the last" parameter to "mailpoet:subscriber:email-sent-count" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
3dbe1bd049 Add "in the last" parameter to "woocommerce:customer:spent-average" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
adff3b61a6 Add "in the last" parameter to "woocommerce:customer:order-count" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
d9be326aa7 Add "in the last" parameter to "woocommerce:customer:spent-total" field
[PREMIUM-253]
2024-03-11 10:31:15 +01:00
314b1f3c27 Change method for detecting empty product pages
The previous method was relying on the idea that product pages would not
 trigger the `the_content` filter since they don't have to render the
 content. Testing revealed that this idea was unreliable.

In one instance WordPress was triggering `the_content` when attempting
to filter the excerpt, even though the excerpt was empty.

This changes the detection method to a much more direct inspection of
the post's content.

MAILPOET-5859
2024-03-08 12:27:06 +01:00
0ab2be782d Show forms on empty product pages
The current logic for form rendering assumes that a single product page
will trigger the filter `the_content`. This is not always true. In cases
where the product has no description, WooCommerce does not render the
description tab at all, which is where that filter usually fires (in my
testing).

This change ensures that we still give these forms a chance to render on
 such pages.

MAILPOET-5859
2024-03-08 12:27:06 +01:00
f6d8eb41b4 Sort automation filters alphabetically
[MAILPOET-5683]
2024-03-08 11:30:08 +01:00
fefc56d5de Move component PremiumModalForStepEdit from common to automations
This was causing common components were dependent on the automation store
and was causing subsequent issues when the original modal was used in the email editor.
[MAILPOET-5932]
2024-03-07 17:04:19 +01:00
f7fbe3fc8c Try adding product to checkout directly 2024-03-07 11:13:03 +01:00
f2db5c71d0 Add product to cart before test 2024-03-07 11:13:03 +01:00
3a87c7d0c8 Try with reordering tests 2024-03-07 11:13:03 +01:00
8647abe1e4 Try adding to cart twice time 2024-03-07 11:13:03 +01:00
300bedceea Try reordering scenario position in test 2024-03-07 11:13:03 +01:00
3db8cfc656 Improve adding product to cart method 2024-03-07 11:13:03 +01:00
d0827860d2 Add dummy esc_attr function for unit tests
[MAILPOET-5918]
2024-03-05 16:03:49 +01:00
fc7ecaa0b1 Add missing escaping to Variables postprocessor
[MAILPOET-5918]
2024-03-05 16:03:49 +01:00
8faaa174bc Add post processor for replacing CSS variables with values
[MAILPOET-5918]
2024-03-05 16:03:49 +01:00
a7153d70c3 Add getVariablesValuesMap to the theme controller
This commit adds a method that returns map of CSS variables and their values defined based on the theme.json
It is a preparation step for a postprocessor that will use this map to replace variables with values in final HTML.
There are many clients that don't support CSS variables
[MAILPOET-5918]
2024-03-05 16:03:49 +01:00
c545dc4967 Refactor applying padding in block renderers
Instead of using our own logic for building padding style definition,
we switch to wp_style_engine_get_styles which generates the styles definitions for us.
It also handles value variable formatting to valid CSS (var:preset|spacing|50 to var(--wp--preset--spacing--50)).
[MAILPOET-5918]
2024-03-05 16:03:49 +01:00
7548496da0 Release 4.45.0 2024-03-05 13:24:29 +02:00
4f2725064d Update Ubuntu images
[MAILPOET-5931]
2024-03-05 08:54:43 +02:00
4dbd50de41 Fix clicking selector to close sidebar
[MAILPOET-5930]
2024-03-04 14:54:10 +02:00
b02097a876 Allow navigation to previous steps
MAILPOET-5216
2024-03-04 12:22:13 +01:00
e960504c5f Replace useSetting with window reference
There seems to be an issue with useSetting. Simply having
`useSetting('welcome_wizard_current_step')` in App causes re-renders on
any state change. The effect was that you could only type one letter in
the input fields before the app would re-render and the field would lose
 focus.

I tried and failed to figure out what was causing all the re-renders, so
 for now I've settled on this workaround, since we only care about the
 initial state of the setting anyway. That being said, this seems like
 something we should investigate as it could be affecting other
 components and causing lots of unnecessary re-renders.

MAILPOET-5216
2024-03-04 12:22:13 +01:00
5f99a11cad Extract navigation helper
MAILPOET-5216
2024-03-04 12:22:13 +01:00
3067b2715d Ensure back button works on MSS step
MAILPOET-5216
2024-03-04 12:22:13 +01:00
8a168228e4 Don't wait for progress save before proceeding
MAILPOET-5216
2024-03-04 12:22:13 +01:00
417a2ba273 Conditional logic for start welcome wizard button
Make the button say "Continue setup" if we can see that the user has
already started.

MAILPOET-5216
2024-03-04 12:22:13 +01:00
720e624340 Clear current step setting after finishing
MAILPOET-5216
2024-03-04 12:22:13 +01:00
202f9e0ed4 Always track current welcome wizard page
MAILPOET-5216
2024-03-04 12:22:13 +01:00
e4e89cd592 Add helper for navigation that saves progress
MAILPOET-5216
2024-03-04 12:22:13 +01:00
812db58954 Add welcome wizard current step setting
MAILPOET-5216
2024-03-04 12:22:13 +01:00
06b6d91456 Allow sending if domain authentication required but not in cache and shop not available
[MAILPOET-5921]
2024-03-04 11:37:40 +01:00
f3c8d16439 Increase transient expiration time
[MAILPOET-5921]
2024-03-04 11:37:40 +01:00
f8b571724d Add test
[MAILPOET-5921]
2024-03-04 11:37:40 +01:00
52a68ee508 Do not reload cache if no data returned
and a small refactor for duplicated code.

[MAILPOET-5921]
2024-03-04 11:37:40 +01:00
ceeab00b96 Use colors from theme palette in styles preview
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
698c41b77b Use styles from settings controller in preview
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
db8dac03d2 Prepare styles in store for sidebar
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
46e5576ddc Set width of Navigator buttons to 100%
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
5cc8be4ba9 Use Navigator component for switching screens in Styles sidebar
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
049632d170 Create style preview component
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
454eb87fcc Add styles sidebar component
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
b32922dfc8 Save active tab in email editor store
[MAILPOET-5638]
2024-03-01 16:36:52 +01:00
a7b67aa23b Ensure the parameter is always int
[MAILPOET-5895]
2024-03-01 14:39:19 +01:00
eea5ca0b83 Update integration test for column and columns
After refactoring the styles are composed a bit differently, so we need to update tests.
[MAILPOET-5638]
2024-02-29 11:05:55 +01:00
075eaab28a Change image caption align to center
We don't need to set the caption align by image alignment. It should be always center.
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
3a2573bb5b Fix column and columns width when border is set
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
4caa2f0723 Use WP native function for border style preparation
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
a693c6f4ae Fix width for full-width blocks with borders
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
e0056be45e Add component for displaying a warning about possible incompatibility
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
76e3a20c24 Improve border compatibility across email clients
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
f9ed604227 Fix setting image width when it's empty
The min function doesn't work properly with strings. Converted widths to numbers should work better here.
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
2636bc1055 Update BlocksWidthPreprocessor to calculate with borders
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
53a192b3d8 Add support for rendering image border
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
9e8647f046 Add support for rendering column and columns borders
[MAILPOET-5821]
2024-02-29 11:05:55 +01:00
73163d103b Improve acceptance test for new email editor 2024-02-29 09:20:42 +01:00
ea681ea87b Activate TT1 theme for subsite and main site when we run multisite tests
It seems that when we use multisite configuration the integration tests load site from test.local/php7_multisite
but acceptance tests run on test.local
So let's activate correct theme on both
[MAILPOET-5925]
2024-02-28 12:26:56 -06:00
8629df7684 Remove unnecessary code for activation twentynineteen theme
After we updated the oldest supported WP and PHP versions, we don't need this theme anymore.
When I checked recent builds, I notice we are getting:

Error: The 'twentynineteen' theme could not be found.

So it already works for some time without the theme being activated.
[MAILPOET-5925]
2024-02-28 10:38:10 -06:00
c39b498e59 Remove test dependency on WooCommerce Blocks
The plugin was integrated into WooCommerce Core and is no longer available for download.
[MAILPOET-5925]
2024-02-28 10:38:10 -06:00
ea22c8b2e9 Install the desired theme in the test environment also for multisite.
There is an integration test that is intentionally failing in case
we changed the theme we used for the test.
This commit ensures we activate correct theme also for multisite.
[MAILPOET-5741]
2024-02-28 10:38:10 -06:00
85e4bb2ce8 Remove an unnecessary class from a column wrapper
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
f2dd786d19 Remove unused method from SettingsController
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
6e887287e5 Remove unused variable from columns block renderer
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
5f2b5e4bd4 Add support for the site theme's color palette
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
e5d11f99d4 Cache WP_Theme_JSON instance
This is a slight improvement to avoid building WP_Theme_JSON instance repeatedly.
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
b724ef4ac2 Extract Theme related methods from SettingsController as ThemeController
I want to avoid the SettingsController becoming some kind of a god class
so in this step, I extracted themejson-related stuff to an extra class.

In the future, we should also move methods for manipulating CSS to a helper.
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
aa658782fb Move getElementInnerHTML from button to DomDocumentHelper
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
febc070c0f Use dom helper for extracting classes from block HTML
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
d35e498f36 Add getAttributeValueByTagName to dom helper
I'm adding this method to cover use-cases where we need to extract classes
from a block's HTML.
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
875fde56e9 Add colors from palette support to the button
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
299d51effa Add support for palette colors for column and columns
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
5ad27b6038 Adjust the list block renderer to support inlined colors
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
330b4c5a6c Adjust Paragraph block to work with inlined color palette CSS
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
2645d57dcb Adjust Paragraph block to work with inlined color palette CSS
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
f3392168ca Add color palette classes to CSS for renderer
[MAILPOET-5741]
2024-02-28 09:01:20 +01:00
6ea4847def Release 4.44.1 2024-02-27 16:43:24 +03:00
a2a960bf63 Update xdebug to 3.3.1 for PHP 8.x docker images
The older versions fail to compile during the build.
Updating to newest xdebug release fixed the issue.
[MAILPOET-5924]
2024-02-27 12:54:47 +01:00
ec35084afd Update templates to be more generic
[MAILPOET-5797]
2024-02-26 15:16:52 +01:00
f8834df510 Add recent clickers prebuilt segment
MAILPOET-5685
2024-02-26 14:27:28 +01:00
703367abe8 Add non-openers prebuilt segment
MAILPOET-5685
2024-02-26 14:27:28 +01:00
b5f51482a4 Add clickers prebuilt segment
MAILPOET-5685
2024-02-26 14:27:28 +01:00
cf6bd853e4 Add first time buyer prebuilt segment
MAILPOET-5685
2024-02-26 14:27:28 +01:00
94512ff543 Add unengaged subscribers prebuilt segment
MAILPOET-5685
2024-02-26 14:27:28 +01:00
78dcd0fa3d Add prebuilt segment for frequently uses coupons
MAILPOET-5685
2024-02-26 14:27:28 +01:00
f3ccb8e39f Add prebuilt segment for used a coupon code
MAILPOET-5685
2024-02-26 14:27:28 +01:00
2401da2883 Update 6 month last engagement date segment
MAILPOET-5760
2024-02-26 12:34:59 +01:00
8572fe619e Simplify and fix Engaged Subscribers segments
It was never correct to include last sending date as engagement.
`lastEngagementDate` automatically includes all the conditions that we
care about.

MAILPOET-5760
2024-02-26 12:34:59 +01:00
7dc202561d Prevent false positives in parameter detection
[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
81582b80bc Add utm_source_platform parameter
[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
0ea6d8d7f4 Test that existing utm_parameters do not get overwritten
[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
5759bace76 Fix test
We use now add_query_arg to add the parameter. That means it gets properly sanitized and spaces are replaced by +

[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
08ed35f3ea Do not overwrite existing parameters
[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
98a62e8bdc Filter the processed link
[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
6085ec954f Always add utm_source and utm_medium parameters to links
[MAILPOET-5882]
2024-02-26 11:37:31 +01:00
9355587c10 Replace ORM::raw_execute usages with Doctrine connection
[MAILPOET-5761]
2024-02-26 09:22:18 +01:00
405366160f Deprecate ModelValidator as don't use Paris models anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
27cbe00bd9 Deprecate SubscriberSegment model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
51cf8e0bd2 Deprecate SubscriberCustomField model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
d824fe23e7 Deprecate Subscriber model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
c6524edf25 Deprecate SendingQueue model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
1a0a64cb4e Deprecate Segment model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
9c3b191a57 Deprecate ScheduledTaskSubscriber model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
c5d1715f39 Deprecate ScheduledTask model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
1d69fcb49f Deprecate NewsletterSegment model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
3312d033ef Deprecate Newsletter model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
cb0b4acd33 Deprecate CustomField model as it is not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
1d6a6a7894 Deprecate main Model class as models are not used anymore
[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
4febc024ef Remove integration tests for all the remaining models
The Paris models are not used anymore and will be deprecated in
subsequent commits. Removing the tests for those models.

[MAILPOET-5763]
2024-02-23 17:07:34 +01:00
aba54c5116 Fix ampersand character rendered by newsletter:post_title shortcode
[MAILPOET-5724]
2024-02-22 10:00:38 +01:00
bc56bfd050 Update readme.txt
[MAILPOET-5915]
2024-02-21 08:37:42 +01:00
188beb896e Release 4.44.0 2024-02-20 12:40:11 +01:00
814f8ce302 Use large instance for zip build
After the update of Gutenberg packages, builds stared failing with
an exit code 1 without any other information.
Increasing the instance helps. We are not completely sure what's causing
the issue. We suspect memory consumption during the build.
In the past, we had to increase from medium to medium+ after updating the webpack to v5
[MAILPOET-5714]
2024-02-19 14:25:47 +01:00
e11a11a1c5 Bump WooCommerce versions: minimum to 8.5, tested up to 8.6
[MAILPOET-5904]
2024-02-19 12:05:57 +01:00
95fc8662a6 Fix issue with month switching in date range picker
The issue is related to the underlying react-dates library used
in woocommerce/components in calendar/date-range.js

See https://github.com/woocommerce/woocommerce/blob/trunk/packages/js/components/src/calendar/date-range.js#L45-L104

I was not able to fully understand why it started to happen after the update
but I have a suspicion that it may be related to the change that causes rendering
popups at the end of the body.

The Gutenberg library already moved away from react-dates and I assume
that Woo Components will do that as well.

This commit adds a patch that adds e.stopPropagation() to the place
where the original workaround is trying to prevent losing focus.

[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
0835249258 Dont render an empty tooltip for failed stats in mailpoet:send-email step
This fixes a console warning: "Tooltip should be called with only a single child element."
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
430aef9fd4 Fix deprecation warnings for popovers
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
3bed8cabed Fix icons and spacing issues on the automations stats page
With the previous fix I accidentally applied box-sizing: border-box;
to everything on the page.
This commit fixes it so that the rule is applied only in places
where it was applied before the upgrade.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
93de29b379 Add support for heading and paragraph padding to form renderer
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
7a5241d3d3 Add support for padding for headings and paragraphs in the form editor
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
19506d724b Add gradient support for heading and paragraph to form renderer
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
325b223953 Add support for gradient for heading and paragraph in form editor
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
f629dc9793 Fix apperance of date filter in automation analytics
All popups are not appended at the end of body so we needed to
adjust CSS selectors that were used to modify the component.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
2858a21783 Add spacing sizes presets
This commit addresses an issue that padding control in the email
an editor is rendered without a slider.
This change makes the padding control render the same as in TT4 theme
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
0298f48dae Fix lint issue after rebase
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
74d217ea62 Remove @types/wordpress__components package
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
de7400e474 Use conditional types for fixing button type
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
4882a1c66f Remove unnecessary array spread in webpack config for email editor
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
bbc4a86759 Rename flag for skipping tests in webpack build
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
ef99b96b66 Fix padding in automation editor name edit popup
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
c929f49761 Fix support of WP admin colors schemes for all plugin pages
When checking pages after updating dependencies, I noticed that some buttons have strange colors.
For example, buttons on the "What would you like to create?" page for new newsletters.

I found that this was related to a change in wordpress/components styles.
The original colors were identical to the default WordPress admin color scheme,
so the buttons were ok when an admin used the default scheme, and in case they use a different scheme
the buttons still look like default (blue).
But after the update, all components on MailPoet pages that don't load WP color admin variables
had a strange purple color.

This commit fixes it by including CSS for admin color schemes into mailpoet-plugin.css which is loaded on every MailPoet admin page.

Note the mixin wordpress-admin-schemes() is included in many build styles for other wordpress packages (e.g. wordpress/block-editor)
so admin color schemes worked correctly on some MailPoet pages even before this change.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
7acdbf7fc3 Fix error for Tooltip text using ReactNode
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
8ef77dbe58 Add support for skipping build of JS tests and skip when building zip
This commit addresses issue with insufficient resources on Circle CI
to avoid using larger executor instances.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
ee07cb1208 Disable TsCheckerPlugin for email editor production build
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
31e31e3f30 Remove unnecessary types overrides for Wordpress/components
I believe these are no longer in use because wordpress/components
come with built types.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
d33de5f51c Update acceptance tests
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
0a0a0d404a Update browserify-sign dependency
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
e74bd44319 Update wordpress/* dev dependencies also to wp-6.4
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
795279b637 Opt-in to no margin for FontSizePicker
The bottom margin will be deprecated. With __nextHasNoMarginBottom
switched to the future styles without the margin.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
d1a88b902f Remove unnecessary wrapper for toggle sidebar panel in form editor
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
aa74dfc0e4 Fix eslint issues
The issues were related to a change in Gutenberg where ActionCreators are not promisified.
See https://github.com/WordPress/gutenberg/pull/52530
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
83f221b80b Fix TS issues with props in automation TemplateDetail component
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
adbbab6b61 Fix incorrect indentation of the admin panel in automations editor
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
ad318563df Fix document actions appearance in automations editor
The dropdown component used for setting the automation name is based
on the document actions component from edit-site package. After the update,
the appearance changed significantly, and it was broken.
This commit adds CSS to restore the original look as before the update.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
8431ec33e1 Fix the rest of TS errors in automations codebase
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
cb7ae2a442 Fix value in Dropdown focusOnMount prop
The currently supported values are 'firstElement' | boolean
Based on the JS doc and my testing, we need to use true
to hide the popup on click elsewhere or by ESC.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
b9475c43b8 Update the type of the button with extended props used in automation
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
ca22a7f37b Fix buttons prop types issues in automation
[MAILPOPET-5714]
2024-02-19 11:44:33 +01:00
c143da4ccf Fix error JSX element type ConfirmDialog does not have any construct or call signatures
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
daf6618941 Remove unnecessary fix for missing Popover props
The new type has the props.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
99aaec7f98 Remove passing setIsBusy to dropdown control in OptionButton
Overriding onClick: (setIsBusy?: Dispatch<SetStateAction<boolean>>) => void;
was causing TS errors when passing controls with the type ControlWithSetIsBusy to DropdownMenu.

The OptionButton that uses isBusy logic is used only in the Hero section at automation
Homepage. The setIsBusy function that was passed to control's onClick was not used.

In all other cases where we were passing controls to DrowdownMenu, we didn't set any isBusy state.
So I think it is safe to remove it.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
5529816a30 Workaround TS error about missing variant prop on MenuItem component
[MAILOPET-5714]
2024-02-19 11:44:33 +01:00
1b4bf9f2dd Make useDispatch hook type in settings store compatible with wp/data
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
0c9b105cd0 Fix ToolbarItem component typescript errors
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
4f1ddc3630 Fix TS errors in assets/js/src/common
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
4d1cacd89b Update Button component props type in MailPoet automation integration
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
c5236e59fc Fix SearchControl error in Segments Template Selection
The search functionality hasn't been implemented yet. The task is currently in backlog.
The control was added in an initial task but is hidden.
I decided to keep it so that I don't remove the translation and just add a dummy
onChange callback to prevent TS error.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
e24059959e Remove unnecessary Popover.Slot
It is not longer needed see: https://github.com/WordPress/gutenberg/pull/53889
It was causing TS errors
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
349c17ef1d Fix remaining Typescript warnings in form-editor
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
6224f49842 Fix types for SelectControl Options
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
8a34588bbe Use proper types for Color and FontSize
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
4d5705243f Remove custom type definitions that were added in packages
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
8069ba320c Fix types for Notices
There is a mismatch between the WPNotice type and the WordPress/notice store
and Notice defined in the components package.

[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
027e234b64 Remove unused WordPress module declarations
These were needed for the types for stores used in the email editor
when it was based on the post editor. We switched to the custom editor
so we can remove those.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
5754f2be68 Update deprecated Button props
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
666b0ff9e6 Refactor multiple useSelect calls into one in BasicSettingsPanel
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
2d42b7945c Fix 'useSelect' issue causing multiple renders of basic settings
This commit fixes a warning:
"The 'useSelect' hook returns different values when called with the same state and parameters. This can lead to unnecessary rerenders."
The warning was coming from the BasicSettingsPanel component and was caused
by getAllAvailablePages selector, which returned a new array every time.

[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
37cd1b01f8 Fix types issues in font selection format
The new version of @wordpress/rich-text comes with build types,
but the RichTextFormat is missing attribute values.
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
2acd815127 Update @types/wordpress_xxx packages
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
dee0823098 Remove @types/wordpress__ for packages that have build-types
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
f12be521cc Update WordPress packages to tag wp-6.4
This commit sets all wordpress/* packages we list in package.json
to use tag wp-6.4, which should install the version used in WordPress 6.4
[MAILPOET-5714]
2024-02-19 11:44:33 +01:00
1338554c41 Change property name to better fit to new classname
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
dc96fa2b1c Add postprocessor for replacing mark tag to span
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
9b54217049 Rename PreprocessManager class to ProcessManager
As we want to add rendering postprocessing, it's better to use a different name for this class.
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
9106d38aee Add text highlighting support for buttons
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
a671a88956 Remove replacing space in image URL
This fix should not be used anymore.
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
b6538cd1c6 Set default line-height for the rendered email
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
7fac0e019f Remove line-height CSS styles
Because the line height setting makes the rendered email not look good sometimes.
For now we decided to remove it.
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
b71e68d8da Add loading format library styles in email editor
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
901d1a1721 Activate text highlighting in email editor
[MAILPOET-5809]
2024-02-19 11:18:58 +01:00
aeabbb05b2 Update circle config 2024-02-18 09:27:48 +01:00
305db25376 Update k6 to latest and improve running tests 2024-02-18 09:27:48 +01:00
19cf611061 Try to fix filling from address 2024-02-18 09:27:48 +01:00
6fe3d1cd09 Update helper 2024-02-18 09:27:48 +01:00
937c885b21 Fix code formatting 2024-02-18 09:27:48 +01:00
cf3c221ebd Add closing tutorial video if prompted 2024-02-18 09:27:48 +01:00
ec3ddbb6cf Include screenshot in the helper 2024-02-18 09:27:48 +01:00
577e7c70e2 Add wait for selector visible in helper 2024-02-18 09:27:48 +01:00
d6eba050e0 Fix code formatting 2024-02-18 09:27:48 +01:00
0c2fabed6c Update tests again 2024-02-18 09:27:48 +01:00
3f95c1f2fb Update tests 2024-02-18 09:27:48 +01:00
42f484742a Finalize performance tests and update helper 2024-02-18 09:27:48 +01:00
cb12c45135 Add new performance test automation welcome email 2024-02-18 09:27:48 +01:00
e1fbb8b996 Add performance test for custom automation 2024-02-18 09:27:48 +01:00
627212f8a9 Save the existing test structure 2024-02-18 09:27:48 +01:00
dab719454a Fix invalid email address causing failed validation on subsequent flush
[MAILPOET-5910]
2024-02-16 12:24:35 -06:00
d1899090bc Create DomDocumentHelper to work with DOMDocument
[MAILPOET-5831]
2024-02-16 14:18:47 +01:00
9ab347080b Create customers to avoid failing tests
[MAILPOET-5909]
2024-02-16 08:29:27 +01:00
13e065fb70 Remove pull request stats
https://mailpoetdev.wordpress.com/2023/10/23/haiku-bi-weekly-meeting-october-10-2022/
2024-02-15 14:38:11 +01:00
3e3b50a037 Fix emoji encoding fallback for MySQL 8.0.28+
As of MySQL 8.0.28, there is no longer charset utf8, which was an alias for utf8mb3.
It is show as utf8mb3 so we need to check for both utf8 for older versions and utf8mb3 to cover newer versions.
See https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html
[MAILPOET-5888]
2024-02-15 13:45:35 +01:00
7d6e0c2ad5 Run nightly acceptance and integration latest test on MySQL 8
[MAILPOET-5888]
2024-02-15 13:45:35 +01:00
9cf2eef721 Register send status
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
e9d8610cda Remove unused method
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
31cb9e10c8 Use type property instead of comment
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
35d7dfc150 Use warning instead of error
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
063e87499e Display a notice when opening a sent email
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
05a7f1c9dd Disable send button if the email was sent
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
7a0cad8abf Update post status when email is sent
[MAILPOET-5851]
2024-02-15 10:43:46 +01:00
ad6199d915 Update composer.phar
[MAILPOET-5902]
2024-02-14 15:53:39 +01:00
851a9626c9 Enable typography appearance
[MAILPOET-5840]
2024-02-14 14:43:10 +01:00
c35fbdf70a Create transactional emails with order created/completed/cancelled triggers in the UI
[MAILPOET-5725]
2024-02-14 14:36:22 +01:00
a17fc5e963 Identify all triggers with "woocommerce:" key prefix as WooCommerce triggers
[MAILPOET-5725]
2024-02-14 14:36:22 +01:00
d5d20d5219 Send transactional emails with order created/completed/cancelled triggers
[MAILPOET-5725]
2024-02-14 14:36:22 +01:00
738c35891a Simplify getSinglePayloadByClass, remove wrong check
[MAILPOET-5720]
2024-02-14 14:36:22 +01:00
8b40553d0b Do not check subscriber against segment when sending transactional email
[MAILPOET-5720]
2024-02-14 14:36:22 +01:00
d9d3dd41c7 Bump composer/composer from 2.2.22 to 2.2.23 in /mailpoet
Bumps [composer/composer](https://github.com/composer/composer) from 2.2.22 to 2.2.23.
- [Release notes](https://github.com/composer/composer/releases)
- [Changelog](https://github.com/composer/composer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/composer/composer/compare/2.2.22...2.2.23)

---
updated-dependencies:
- dependency-name: composer/composer
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-13 10:01:04 -06:00
33fc16a04f Release 4.43.1 2024-02-13 08:40:51 -06:00
51a14a45d3 Use refreshAll() for updates, refresh subscribers/subscriber custom fields conditionally
[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
014b8249bb Replace entityManager->clear with a helper, add cleanup to WP user sync
[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
857ed69c61 Update integration test after change in \MailPoet\Segments\WP
In a previous commit, \MailPoet\Segments\WP was refactored to use
Doctrine instead of Paris. Paris would always convert subscriber emails
to lowercase. We don't do this with the Subscriber entity so it was
necessary to update this test after the refactor.

[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
f0434d74e7 Ensure Doctrine entity cache is cleared after changing the database
ImportExportRepository::updateMultiple() changes subscribers by running
MySQL queries directly. Now that \MailPoet\Segments\WP uses Doctrine as
well this was causing a bug caught by our integration tests.

```
MailPoet\Subscribers\ImportExport\Import\ImportTest::testItSynchronizesWpUsers
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'mary'
+'Mary'

/wp-core/wp-content/plugins/mailpoet/tests/integration/Subscribers/ImportExport/Import/ImportTest.php:719
```

https://app.circleci.com/pipelines/github/mailpoet/mailpoet/16386/workflows/c3fa0cf4-a77d-41ab-a5cc-78d4b37d9228/jobs/278066/tests#failed-test-0

This test was failing because the Doctrine entities were not updated
after the import process ran and modified the subscribers directly in
the database. Running EntityManager::clear() after importing the
subscribers, forces Doctrine to query the database again to update the
entities and prevents this bug.

[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
8318246e1e Improve the way WP users are deleted when running the tests
Doing this to be able to write tests that use any username or email as
it was done in the previous commit. Before the users needed to match the
pattern used inside WPTest::insertUser().

[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
6f98634b94 Replace Subscriber and SubscriberSegment models with Doctrine in \MailPoet\Segments\WP
[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
01cafdf719 Replace Idiomr\ORM with Doctrine in WPTest
[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
374fbe6867 Replace Segment model with Doctrine in \MailPoet\Segments\WP
[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
b63834b02b Change return type as the method always returns a segment
[MAILPOET-5752]
2024-02-12 15:33:28 +01:00
0229eb76ef Only show tutorial icon on the editor
MAILPOET-5735
2024-02-12 13:16:11 +01:00
f8d99b34bf Check table exists before altering it
[MAILPOET-5896]
2024-02-12 11:50:48 +01:00
9f24247285 Add check if meta option is array
[MAILPOET-5891]
2024-02-12 11:15:36 +01:00
db2e61e987 Use "MAX(subscriber_id)" when fething "updated_at" to leverage DB indexes
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
60f1234b71 Check newsletter stats "sentAt" agains correct date (from subsriber task)
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
9db41a5210 Use scheduled task subsriber date for backfilling "sentAt" values
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
7814dda708 Backfill newsletter stats with processed subscribers even with failed status
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
0d71d96cfa Backfill missing sentAt from https://github.com/mailpoet/mailpoet/pull/5416
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
a5d44ba9b6 Backfill missing newsletter statistics from https://github.com/mailpoet/mailpoet/pull/5416
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
78732f8a5d Update also sending queue counts when marking stuck newsletters as sent
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
2804125827 Update also "sent_at" when marking stuck newsletters as sent
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
74f95b972f Split migration code into private methods
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
e3214e441b Add migration to fix sending tasks stuck in "invalid" state
[MAILPOET-5887]
2024-02-12 08:52:30 +02:00
bbe471e653 Use standard formatting for env.sample
MAILPOET-4237
2024-02-08 11:13:35 -06:00
ecd7614337 Add defaults for unset env variables
These defaults maintain backwards compatibility if developers don't
change anything

MAILPOET-4237
2024-02-08 11:13:35 -06:00
a78a31f110 Fix indentation
MAILPOET-4237
2024-02-08 11:13:35 -06:00
fcc4be330c Add set -e to hook scripts to exit on fail
MAILPOET-4237
2024-02-08 11:13:35 -06:00
52397951d8 Rename scripts and make messages consistent
MAILPOET-4237
2024-02-08 11:13:35 -06:00
97f811390d Make install js/php commands optional
MAILPOET-4237
2024-02-08 11:13:35 -06:00
7b64c47733 Don't run any git hooks unless env variable is set
MAILPOET-4237
2024-02-08 11:13:35 -06:00
bc4014d4a3 Make lint-staged commands configurable
MAILPOET-4237
2024-02-08 11:13:35 -06:00
ec6d26162b Add hooks to install updates automatically
MAILPOET-4237
2024-02-08 11:13:35 -06:00
5d8d7adc08 Add command to install just PHP dependencies
MAILPOET-4237
2024-02-08 11:13:35 -06:00
15b351b3f1 Bump follow-redirects from 1.15.2 to 1.15.4
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-08 12:15:20 +01:00
d4d4db7cc5 Release 4.43.0 2024-02-06 14:47:57 +01:00
1647 changed files with 47908 additions and 34752 deletions

View File

@ -0,0 +1,19 @@
#!/bin/bash
# Fetch the versions of WooCommerce from the WordPress API
VERSIONS=$(curl -s https://api.wordpress.org/plugins/info/1.0/woocommerce.json | jq -r '.versions | keys_unsorted | .[]' | grep -v 'trunk')
LATEST_VERSION=""
# Find the latest version
for version in $VERSIONS; do
LATEST_VERSION=$version
done
# Check if the latest version is a beta/RC version
if [[ $LATEST_VERSION != *'beta'* && $LATEST_VERSION != *'rc'* ]]; then
echo "No WooCommerce beta/RC version found."
echo "LATEST_BETA="
else
echo "Latest WooCommerce beta/RC version: $LATEST_VERSION"
echo "LATEST_BETA=$LATEST_VERSION"
fi

View File

@ -0,0 +1,28 @@
#!/bin/bash
# Fetch the WordPress releases RSS feed
RSS_FEED=$(curl -s https://wordpress.org/news/category/releases/feed/)
# Extract the latest version from the feed and convert it to lowercase
LAST_VERSION=$(echo "$RSS_FEED" | grep -o '<title>WordPress [^<]*</title>' | sed -E 's/<\/?title>//g' | head -n 1 | tr [:upper:] [:lower:])
# Check if a beta or RC version is found
if [[ $LAST_VERSION == *'beta'* ]]; then
# Extract titles containing beta versions from the feed
VERSION_LINE=$(echo "$RSS_FEED" | grep -o '<code>wp core update [^<]*</code>' | sed -E 's/<\/?code>//g' | head -n 1 | grep 'beta')
LATEST_BETA=$(echo "$VERSION_LINE" | sed -E 's/.*--version=([0-9\.]+-beta[0-9]+).*/\1/')
echo "Latest WordPress beta version: $LATEST_BETA"
echo "LATEST_BETA=$LATEST_BETA"
elif [[ $LAST_VERSION == *'release candidate'* ]]; then
# Extract titles containing RC versions from the feed
VERSION_LINE=$(echo "$RSS_FEED" | grep -o '<code>wp core update [^<]*</code>' | sed -E 's/<\/?code>//g' | head -n 1 | grep 'RC')
LATEST_BETA=$(echo "$VERSION_LINE" | sed -E 's/.*--version=([0-9\.]+-RC[0-9]+).*/\1/')
echo "Latest WordPress RC version: $LATEST_BETA"
echo "LATEST_BETA=$LATEST_BETA"
else
echo "No WordPress beta/RC version found."
echo "LATEST_BETA="
fi

View File

@ -2,6 +2,7 @@ version: 2.1
orbs:
slack: circleci/slack@4.2.0
jq: circleci/jq@3.0.0
slack-fail-post-step: &slack-fail-post-step
post-steps:
@ -98,7 +99,7 @@ executors:
wpcli_php_max_wporg:
<<: *default_job_config
docker:
- image: mailpoet/wordpress:7.4_20210122.1
- image: mailpoet/wordpress:8.1_20230307.1
wpcli_php_latest:
<<: *default_job_config
@ -154,7 +155,7 @@ jobs:
./tools/vendor/composer.phar validate --no-check-all --no-check-publish --working-dir=prefixer
touch .env
./do install
./do compile:all --env production
./do compile:all --env production --skip-tests
./do doctrine:generate-cache
vendor/bin/codecept build
./do twig:generate-cache
@ -190,11 +191,10 @@ jobs:
- run:
name: Download additional WP Plugins for tests
command: |
./do download:woo-commerce-zip latest
./do download:woo-commerce-subscriptions-zip 5.7.0
./do download:woo-commerce-memberships-zip 1.25.2
./do download:woo-commerce-blocks-zip 11.7.0
./do download:automate-woo-zip 6.0.10
./do download:woo-commerce-zip 9.2.2
./do download:woo-commerce-subscriptions-zip 6.6.0
./do download:woo-commerce-memberships-zip 1.26.5
./do download:automate-woo-zip 6.0.32
- run:
name: Dump tests ENV variables for acceptance tests
command: |
@ -265,7 +265,7 @@ jobs:
security_analysis:
working_directory: /home/circleci/mailpoet/mailpoet
machine:
image: ubuntu-2204:2022.10.2
image: default
docker_layer_caching: false
steps:
- attach_workspace:
@ -330,6 +330,7 @@ jobs:
name: 'JS Newsletter Editor Tests'
command: |
mkdir test-results/mocha
./do compile:js --env production --only-tests
./do t:newsletter-editor test-results/mocha/newsletter_editor_junit.xml
- run:
name: 'JS Tests'
@ -344,7 +345,7 @@ jobs:
parallelism: 20
working_directory: /home/circleci/mailpoet/mailpoet
machine:
image: ubuntu-2204:2022.10.2
image: default
docker_layer_caching: false
parameters:
multisite:
@ -374,60 +375,104 @@ jobs:
woo_memberships_version:
type: string
default: ''
woo_blocks_version:
type: string
default: ''
automate_woo_version:
type: string
default: ''
enable_cot:
blockbased_theme:
type: integer
default: 0
enable_cot_sync:
enable_hpos:
type: integer
default: 0
enable_hpos_sync:
type: integer
default: 0
disable_hpos:
type: integer
default: 0
use_wordpress_beta:
type: boolean
default: false
use_woocommerce_beta:
type: boolean
default: false
wordpress_version:
type: string
default: ''
environment:
MYSQL_COMMAND: << parameters.mysql_command >>
MYSQL_IMAGE: << parameters.mysql_image >>
CODECEPTION_IMAGE_VERSION: << parameters.codeception_image_version >>
WORDPRESS_IMAGE_VERSION: << parameters.wordpress_image_version >>
WORDPRESS_VERSION: << parameters.wordpress_version >>
steps:
- attach_workspace:
at: /home/circleci
- run:
name: 'Set up virtual host'
command: echo 127.0.0.1 mailpoet.loc | sudo tee -a /etc/hosts
- run:
name: Check for Latest WordPress Beta Version
command: |
if [ "<< parameters.use_wordpress_beta >>" == "true" ]; then
LATEST_WP_BETA=$(../.circleci/check_wordpress_beta.sh | grep 'LATEST_BETA' | cut -d'=' -f2)
if [ -z "$LATEST_WP_BETA" ]; then
echo "No latest beta version found. Ending job early."
circleci-agent step halt
else
echo "export WORDPRESS_VERSION=$LATEST_WP_BETA" >> $BASH_ENV
echo "Using WordPress Beta Version: $LATEST_WP_BETA"
fi
else
echo "Not using WordPress Beta Version"
fi
- run:
name: Check for Latest WooCommerce Beta Version
command: |
if [ "<< parameters.use_woocommerce_beta >>" == "true" ]; then
LATEST_WC_BETA=$(../.circleci/check_woocommerce_beta.sh | grep 'LATEST_BETA' | cut -d'=' -f2)
if [ -z "$LATEST_WC_BETA" ]; then
echo "No WooCommerce Beta version found. Ending job early."
circleci-agent step halt
else
echo "export WOOCOMMERCE_VERSION=$LATEST_WC_BETA" >> $BASH_ENV
echo "Using WooCommerce Beta Version: $LATEST_WC_BETA"
fi
else
echo "export WOOCOMMERCE_VERSION=<< parameters.woo_core_version >>" >> $BASH_ENV
echo "Not using WooCommerce Beta Version"
fi
- run:
name: 'Pull test docker images'
# Pull docker images with 3 retries
command: i='0';while ! docker-compose -f tests/docker/docker-compose.yml pull && ((i < 3)); do sleep 3 && i=$[$i+1]; done
command: i='0';while ! docker-compose -f ../tests_env/docker/docker-compose.yml pull && ((i < 3)); do sleep 3 && i=$[$i+1]; done
- run:
name: Create docker containers for test
# We experienced some failures when creating containers so we do it explicitly with one retry
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose create || docker-compose create
- run:
# Some tools we use may need different version based on PHP version used in docker
name: Ensure correct versions of tools
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project -e COMPOSER_DEV_MODE=1 --entrypoint "php tools/install.php" codeception_acceptance
- when:
condition: << parameters.woo_core_version >>
condition: ${WOOCOMMERCE_VERSION}
steps:
- run:
name: Download WooCommerce Core
command: |
cd tests/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-zip << parameters.woo_core_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_acceptance
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-zip ${WOOCOMMERCE_VERSION}" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_acceptance
- when:
condition: << parameters.woo_subscriptions_version >>
steps:
- run:
name: Download WooCommerce Subscriptions
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-subscriptions-zip << parameters.woo_subscriptions_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_acceptance
- when:
condition: << parameters.woo_memberships_version >>
@ -435,23 +480,15 @@ jobs:
- run:
name: Download WooCommerce Memberships
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-memberships-zip << parameters.woo_memberships_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_acceptance
- when:
condition: << parameters.woo_blocks_version >>
steps:
- run:
name: Download WooCommerce Blocks
command: |
cd tests/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-blocks-zip << parameters.woo_blocks_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_acceptance
- when:
condition: << parameters.automate_woo_version >>
steps:
- run:
name: Download AutomateWoo
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:automate-woo-zip << parameters.automate_woo_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_acceptance
- run:
name: Group acceptance tests
@ -472,7 +509,7 @@ jobs:
name: Run acceptance tests
command: |
mkdir -m 777 -p tests/_output/exceptions
cd tests/docker
cd ../tests_env/docker
args=(
--steps
--debug
@ -485,8 +522,11 @@ jobs:
-e CIRCLE_BRANCH=${CIRCLE_BRANCH} \
-e CIRCLE_JOB=${CIRCLE_JOB} \
-e MULTISITE=<< parameters.multisite >> \
-e ENABLE_COT=<< parameters.enable_cot >> \
-e ENABLE_COT_SYNC=<< parameters.enable_cot_sync >> \
-e BLOCKBASED_THEME=<< parameters.blockbased_theme >> \
-e ENABLE_HPOS=<< parameters.enable_hpos >> \
-e ENABLE_HPOS_SYNC=<< parameters.enable_hpos_sync >> \
-e DISABLE_HPOS=<< parameters.disable_hpos >> \
-e WORDPRESS_VERSION=${WORDPRESS_VERSION} \
codeception_acceptance "${args[@]}"
- run:
name: Check exceptions
@ -502,7 +542,7 @@ jobs:
performance_tests:
working_directory: /home/circleci/mailpoet/mailpoet
machine:
image: ubuntu-2204:2022.10.2
image: default
docker_layer_caching: false
parameters:
mysql_command:
@ -517,6 +557,9 @@ jobs:
url:
type: string
default: 'http://localhost:9500'
us:
type: string
default: 'admin'
pw:
type: string
default: 'password'
@ -598,16 +641,21 @@ jobs:
integration_tests:
working_directory: /home/circleci/mailpoet/mailpoet
machine:
image: ubuntu-2204:2022.10.2
image: default
docker_layer_caching: false
environment:
CODECEPTION_IMAGE_VERSION: << parameters.codeception_image_version >>
MYSQL_COMMAND: << parameters.mysql_command >>
MYSQL_IMAGE: << parameters.mysql_image >>
WORDPRESS_IMAGE_VERSION: << parameters.wordpress_image_version >>
WORDPRESS_VERSION: << parameters.wordpress_version >>
parameters:
codeception_image_version:
type: string
default: ''
wordpress_image_version:
type: string
default: ''
group:
type: string
default: ''
@ -617,10 +665,13 @@ jobs:
skip_plugins:
type: integer
default: 0
enable_cot:
enable_hpos:
type: integer
default: 0
enable_cot_sync:
enable_hpos_sync:
type: integer
default: 0
disable_hpos:
type: integer
default: 0
multisite:
@ -641,46 +692,83 @@ jobs:
woo_memberships_version:
type: string
default: ''
woo_blocks_version:
automate_woo_version:
type: string
default: ''
automate_woo_version:
use_wordpress_beta:
type: boolean
default: false
use_woocommerce_beta:
type: boolean
default: false
wordpress_version:
type: string
default: ''
steps:
- attach_workspace:
at: /home/circleci
- run:
name: Check for Latest WordPress Beta Version
command: |
if [ "<< parameters.use_wordpress_beta >>" == "true" ]; then
LATEST_WP_BETA=$(../.circleci/check_wordpress_beta.sh | grep 'LATEST_BETA' | cut -d'=' -f2)
if [ -z "$LATEST_WP_BETA" ]; then
echo "No latest beta version found. Ending job early."
circleci-agent step halt
else
echo "export WORDPRESS_VERSION=$LATEST_WP_BETA" >> $BASH_ENV
echo "Using WordPress Beta Version: $LATEST_WP_BETA"
fi
else
echo "Not using WordPress Beta Version"
fi
- run:
name: Check for Latest WooCommerce Beta Version
command: |
if [ "<< parameters.use_woocommerce_beta >>" == "true" ]; then
LATEST_WC_BETA=$(../.circleci/check_woocommerce_beta.sh | grep 'LATEST_BETA' | cut -d'=' -f2)
if [ -z "$LATEST_WC_BETA" ]; then
echo "No WooCommerce Beta version found. Ending job early."
circleci-agent step halt
else
echo "export WOOCOMMERCE_VERSION=$LATEST_WC_BETA" >> $BASH_ENV
echo "Using WooCommerce Beta Version: $LATEST_WC_BETA"
fi
else
echo "export WOOCOMMERCE_VERSION=<< parameters.woo_core_version >>" >> $BASH_ENV
echo "Not using WooCommerce Beta Version"
fi
- run:
name: 'Pull test docker images'
# Pull docker images with 3 retries
command: i='0';while ! docker-compose -f tests/docker/docker-compose.yml pull && ((i < 3)); do sleep 3 && i=$[$i+1]; done
command: i='0';while ! docker-compose -f ../tests_env/docker/docker-compose.yml pull && ((i < 3)); do sleep 3 && i=$[$i+1]; done
- run:
name: Create docker containers for test
# We experienced some failures when creating containers so we do it explicitly with one retry
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose create || docker-compose create
- run:
# Some tools we use may need different version based on PHP version used in docker
name: Ensure correct versions of tools
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project -e COMPOSER_DEV_MODE=1 --entrypoint "php tools/install.php" codeception_integration
- when:
condition: << parameters.woo_core_version >>
condition: ${WOOCOMMERCE_VERSION}
steps:
- run:
name: Download WooCommerce Core
command: |
cd tests/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-zip << parameters.woo_core_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_integration
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-zip ${WOOCOMMERCE_VERSION}" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_integration
- when:
condition: << parameters.woo_subscriptions_version >>
steps:
- run:
name: Download WooCommerce Subscriptions
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-subscriptions-zip << parameters.woo_subscriptions_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_integration
- when:
condition: << parameters.woo_memberships_version >>
@ -688,29 +776,21 @@ jobs:
- run:
name: Download WooCommerce Memberships
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-memberships-zip << parameters.woo_memberships_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_integration
- when:
condition: << parameters.woo_blocks_version >>
steps:
- run:
name: Download WooCommerce Blocks
command: |
cd tests/docker
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-blocks-zip << parameters.woo_blocks_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_integration
- when:
condition: << parameters.automate_woo_version >>
steps:
- run:
name: Download AutomateWoo
command: |
cd tests/docker
cd ../tests_env/docker
docker-compose run --rm -w /project --entrypoint "./do download:automate-woo-zip << parameters.automate_woo_version >>" --no-deps -e WP_GITHUB_USERNAME=${WP_GITHUB_USERNAME} -e WP_GITHUB_TOKEN=${WP_GITHUB_TOKEN} codeception_integration
- run:
name: 'PHP Integration tests'
command: |
mkdir -m 777 -p tests/_output/exceptions
cd tests/docker
cd ../tests_env/docker
args=(
--steps
--debug
@ -741,8 +821,10 @@ jobs:
-e WP_TEST_MAILER_SMTP_LOGIN=${WP_TEST_MAILER_SMTP_LOGIN} \
-e WP_TEST_MAILER_SMTP_PASSWORD=${WP_TEST_MAILER_SMTP_PASSWORD} \
-e MULTISITE=<< parameters.multisite >> \
-e ENABLE_COT=<< parameters.enable_cot >> \
-e ENABLE_COT_SYNC=<< parameters.enable_cot_sync >> \
-e ENABLE_HPOS=<< parameters.enable_hpos >> \
-e ENABLE_HPOS_SYNC=<< parameters.enable_hpos_sync >> \
-e DISABLE_HPOS=<< parameters.disable_hpos >> \
-e WORDPRESS_VERSION=${WORDPRESS_VERSION} \
codeception_integration "${args[@]}"
- store_test_results:
path: tests/_output
@ -754,7 +836,7 @@ jobs:
destination: mailhog-data
build_release_zip:
executor: wpcli_php_mysql_latest
resource_class: medium+
resource_class: large
steps:
- attach_workspace:
at: /home/circleci
@ -825,7 +907,8 @@ workflows:
- build
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_tests_base_and_woo_cot_off
name: acceptance_tests_base_and_woo
enable_hpos: 1
requires:
- unit_tests
- static_analysis_php8
@ -833,10 +916,9 @@ workflows:
- qa_php
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_tests_woo_cot_sync
name: acceptance_tests_woo_hpos_sync_on
group: woo
enable_cot: 1
enable_cot_sync: 1
enable_hpos_sync: 1
requires:
- unit_tests
- static_analysis_php8
@ -844,18 +926,19 @@ workflows:
- qa_php
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_tests_woo_cot_no_sync
name: acceptance_tests_woo_hpos_off
group: woo
enable_cot: 1
enable_cot_sync: 0
disable_hpos: 1
requires:
- unit_tests
- static_analysis_php8
- qa_js
- qa_php
- performance_tests:
- acceptance_tests:
<<: *slack-fail-post-step
name: performance_tests
name: acceptance_tests_blockbased_theme
group: frontend
blockbased_theme: 1
requires:
- unit_tests
- static_analysis_php8
@ -868,9 +951,8 @@ workflows:
- integration_tests:
<<: *slack-fail-post-step
group: woo
enable_cot: 1
enable_cot_sync: 1
name: integration_test_woo_cot_sync
enable_hpos_sync: 1
name: integration_test_woo_hpos_sync_on
requires:
- unit_tests
- static_analysis_php8
@ -879,9 +961,8 @@ workflows:
- integration_tests:
<<: *slack-fail-post-step
group: woo
enable_cot: 1
enable_cot_sync: 0
name: integration_test_woo_cot_no_sync
name: integration_test_woo_hpos_on
enable_hpos: 1
requires:
- unit_tests
- static_analysis_php8
@ -890,7 +971,8 @@ workflows:
- integration_tests:
<<: *slack-fail-post-step
group: woo
name: integration_test_woo_cot_off
disable_hpos: 1
name: integration_test_woo_hpos_off
requires:
- unit_tests
- static_analysis_php8
@ -943,20 +1025,20 @@ workflows:
<<: *slack-fail-post-step
requires:
- build
- acceptance_tests_base_and_woo_cot_off
- acceptance_tests_base_and_woo
- js_tests
- integration_test_base
- integration_test_woo_cot_no_sync
- integration_test_woo_cot_off
- integration_test_woo_cot_sync
- acceptance_tests_woo_cot_sync
- acceptance_tests_woo_cot_no_sync
- performance_tests
- integration_test_woo_hpos_on
- integration_test_woo_hpos_off
- integration_test_woo_hpos_sync_on
- acceptance_tests_woo_hpos_sync_on
- acceptance_tests_woo_hpos_off
- acceptance_tests_blockbased_theme
nightly:
triggers:
- schedule:
cron: '0 22 * * 1-5'
cron: '0 1 * * 1-5'
filters:
branches:
only:
@ -967,31 +1049,38 @@ workflows:
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_latest
woo_core_version: latest
woo_subscriptions_version: latest
woo_memberships_version: latest
woo_blocks_version: latest
automate_woo_version: latest
mysql_image: mysql:8.3
mysql_command: --default-authentication-plugin=mysql_native_password
requires:
- build
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_latest_blockbased_theme
group: frontend
blockbased_theme: 1
mysql_image: mysql:8.3
mysql_command: --default-authentication-plugin=mysql_native_password
requires:
- build
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_oldest
woo_core_version: 8.4.0
woo_subscriptions_version: 5.6.0
woo_memberships_version: 1.23.1
woo_blocks_version: 11.6.0
woo_core_version: 9.1.4
woo_subscriptions_version: 6.5.0
woo_memberships_version: 1.25.2
automate_woo_version: 5.8.5
mysql_command: --max_allowed_packet=100M --default-storage-engine=MYISAM
mysql_command: --max_allowed_packet=100M
mysql_image: mysql:5.5
codeception_image_version: 7.4-cli_20220605.0
wordpress_image_version: wp-6.3_php8.0_20230811.1
wordpress_image_version: 6.1.1-php7.4 # We use image with PHP 7.4 and install required WordPress version via CLI
wordpress_version: 6.5.5
requires:
- build
- performance_tests:
<<: *slack-fail-post-step
name: performance_latest
url: https://mpperftesting.mystagingwebsite.com
url: https://mpperftesting.com
us: $WP_TEST_PERFORMANCE_US
pw: $WP_TEST_PERFORMANCE_PW
scenario: nightlytests
requires:
@ -1010,18 +1099,21 @@ workflows:
- integration_tests:
<<: *slack-fail-post-step
name: integration_latest
mysql_image: mysql:8.3
mysql_command: --default-authentication-plugin=mysql_native_password
requires:
- build
- integration_tests:
<<: *slack-fail-post-step
name: integration_oldest
woo_core_version: 8.4.0
woo_subscriptions_version: 5.6.0
woo_memberships_version: 1.24.0
woo_blocks_version: 11.6.0
woo_core_version: 9.1.4
woo_subscriptions_version: 6.5.0
woo_memberships_version: 1.25.2
automate_woo_version: 5.8.5
codeception_image_version: 7.4-cli_20220605.0
mysql_command: --max_allowed_packet=100M --default-storage-engine=MYISAM
wordpress_image_version: 6.1.1-php7.4 # We use image with PHP 7.4 and install required WordPress version via CLI # We use image with PHP 7.4 and install required WordPress version via CLI
wordpress_version: 6.5.5
mysql_command: --max_allowed_packet=100M
mysql_image: mysql:5.5
requires:
- build
@ -1034,6 +1126,36 @@ workflows:
name: acceptance_with_premium_latest
requires:
- build_premium
- integration_tests:
<<: *slack-fail-post-step
name: integration_tests_wordpress_beta
use_wordpress_beta: true
mysql_image: mysql:8.3
mysql_command: --default-authentication-plugin=mysql_native_password
requires:
- build
- integration_tests:
<<: *slack-fail-post-step
name: integration_tests_woocommerce_beta
use_woocommerce_beta: true
mysql_image: mysql:8.3
mysql_command: --default-authentication-plugin=mysql_native_password
requires:
- build
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_tests_wordpress_beta
enable_hpos: 1
use_wordpress_beta: true
requires:
- build
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_tests_woocommerce_beta
enable_hpos: 1
use_woocommerce_beta: true
requires:
- build
- unit_tests:
<<: *slack-fail-post-step
name: unit_with_premium_latest
@ -1044,3 +1166,29 @@ workflows:
name: integration_with_premium_latest
requires:
- build_premium
- acceptance_tests:
<<: *slack-fail-post-step
name: acceptance_with_premium_oldest
woo_core_version: 9.1.4
woo_subscriptions_version: 6.5.0
woo_memberships_version: 1.25.2
automate_woo_version: 5.8.5
codeception_image_version: 7.4-cli_20220605.0
wordpress_image_version: 6.1.1-php7.4 # We use image with PHP 7.4 and install required WordPress version via CLI
wordpress_version: 6.5.5
requires:
- build_premium
- integration_tests:
<<: *slack-fail-post-step
name: integration_with_premium_oldest
woo_core_version: 9.1.4
woo_subscriptions_version: 6.5.0
woo_memberships_version: 1.25.2
automate_woo_version: 5.8.5
codeception_image_version: 7.4-cli_20220605.0
wordpress_image_version: 6.1.1-php7.4 # We use image with PHP 7.4 and install required WordPress version via CLI
wordpress_version: 6.5.5
mysql_command: --max_allowed_packet=100M
mysql_image: mysql:5.5
requires:
- build_premium

View File

@ -0,0 +1,10 @@
<?php
require_once __DIR__ . '/helpers.php';
$repository = 'woocommerce/automatewoo';
$downloadCommand = 'download:automate-woo-zip';
$configParameterName = 'automate_woo_version';
$versionsFilenameSuffix = 'automate_woo_version.txt';
replacePrivatePluginVersion($repository, $downloadCommand, $configParameterName, $versionsFilenameSuffix);

View File

@ -0,0 +1,10 @@
<?php
require_once __DIR__ . '/helpers.php';
$repository = 'woocommerce/woocommerce-memberships';
$downloadCommand = 'download:woo-commerce-memberships-zip';
$configParameterName = 'woo_memberships_version';
$versionsFilenameSuffix = 'woocommerce_memberships_version.txt';
replacePrivatePluginVersion($repository, $downloadCommand, $configParameterName, $versionsFilenameSuffix);

View File

@ -0,0 +1,10 @@
<?php
require_once __DIR__ . '/helpers.php';
$repository = 'woocommerce/woocommerce-subscriptions';
$downloadCommand = 'download:woo-commerce-subscriptions-zip';
$configParameterName = 'woo_subscriptions_version';
$versionsFilenameSuffix = 'woocommerce_subscriptions_version.txt';
replacePrivatePluginVersion($repository, $downloadCommand, $configParameterName, $versionsFilenameSuffix);

View File

@ -0,0 +1,45 @@
<?php
require_once __DIR__ . '/helpers.php';
$downloadCommand = 'download:woo-commerce-zip';
$configParameterName = 'woo_core_version';
$versionsFilenameSuffix = 'woocommerce_version.txt';
/**
* We get the official WooCommerce versions from the WordPress API.
*/
function getWooCommerceVersions(): array {
$url = "https://api.wordpress.org/plugins/info/1.0/woocommerce.json";
$response = file_get_contents($url);
$data = json_decode($response, true);
if (!isset($data['versions'])) {
die("Failed to fetch WooCommerce versions.");
}
return array_keys($data['versions']);
}
$allVersions = getWooCommerceVersions();
$stableVersions = filterStableVersions($allVersions);
[$latestVersion, $previousVersion] = getLatestAndPreviousMinorMajorVersions($stableVersions);
echo "Latest WooCommerce version: $latestVersion\n";
echo "Previous WooCommerce version: $previousVersion\n";
if ($latestVersion) {
echo "Replacing the latest version in the config file...\n";
replaceLatestVersion($latestVersion, $downloadCommand);
} else {
echo "No latest version found.\n";
}
if ($previousVersion) {
echo "Replacing the previous version in the config file...\n";
replacePreviousVersion($previousVersion, $configParameterName);
} else {
echo "No previous version found.\n";
}
saveVersionsToFiles($latestVersion, $previousVersion, $versionsFilenameSuffix);

View File

@ -0,0 +1,123 @@
<?php
require_once __DIR__ . '/helpers.php';
/**
* We try to get the current available official Docker images for WordPress.
*/
function getWordpressVersions(int $page = 1, int $pageSize = 100): array {
$url = "https://registry.hub.docker.com/v2/repositories/library/wordpress/tags?page_size={$pageSize}&page={$page}";
$response = file_get_contents($url);
$data = json_decode($response, true);
return array_column($data['results'], 'name');
}
/**
* We prefer the latest patch versions of WordPress with specified PHP versions.
* For example: 6.5.4-php8.3
*/
function filterVersions(array $versions): array {
return array_filter($versions, fn($version) => preg_match('/^\d+\.\d+\.\d+-php\d+\.\d+$/', $version));
}
/**
* We sort the versions by WordPress version and PHP version.
* The expected output is:
* - 6.5.4-php8.3
* - 6.5.4-php8.2
* - 6.5.3-php8.3
* - 6.5.3-php8.2
*/
function sortVersions(&$versions) {
usort($versions, function($a, $b) {
[$wpA, $phpA] = explode('-php', $a);
[$wpB, $phpB] = explode('-php', $b);
$wpCompare = version_compare($wpB, $wpA);
return $wpCompare !== 0 ? $wpCompare : version_compare($phpB, $phpA);
});
}
/**
* This function group docker tags by the WordPress version and returns the latest with the higher PHP version
* abd the previous with the lower PHP version.
*/
function getLatestAndPreviousVersions(array $sortedVersions): array {
$uniqueVersions = [];
foreach ($sortedVersions as $version) {
[$wpVersion] = explode('-php', $version);
$majorMinorVersion = preg_replace('/\.\d+$/', '', $wpVersion);
$uniqueVersions[$majorMinorVersion][] = $version;
}
krsort($uniqueVersions);
$latestVersionGroup = reset($uniqueVersions);
$previousVersionGroup = next($uniqueVersions);
$latestVersion = $latestVersionGroup === false ? null : reset($latestVersionGroup);
$previousVersion = $previousVersionGroup === false ? null : end($previousVersionGroup);
return [$latestVersion, $previousVersion];
}
/**
* We specify the latest WordPress version only in the docker-compose file for the tests.
*/
function replaceLatestWordPressVersion(string $latestVersion): void {
replaceVersionInFile(
__DIR__ . './../../../tests_env/docker/docker-compose.yml',
'/(wordpress:\${WORDPRESS_IMAGE_VERSION:-\s*)\d+\.\d+\.?\d*-php\d+\.\d+(})/',
'${1}' . $latestVersion . '${2}'
);
}
/**
* We use the previous WordPress version only in the CircleCI config file.
*/
function replacePreviousWordPressVersion(string $previousVersion): void {
replaceVersionInFile(
__DIR__ . './../../../.circleci/config.yml',
'/(wordpress_version: )\d+\.\d+\.?\d*/',
'${1}' . $previousVersion
);
}
$allVersions = [];
$page = 1;
$maxPages = 8;
$latestVersion = null;
$previousVersion = null;
echo "Fetching WordPress versions...\n";
// We fetch the versions until we find the latest and previous versions. But there is a limit of 4 pages.
while (($latestVersion === null || $previousVersion === null) && $page <= $maxPages) {
echo "Fetching page $page...\n";
$versions = getWordpressVersions($page);
$allVersions = array_merge($allVersions, $versions);
$allVersions = filterVersions($allVersions);
sortVersions($allVersions);
[$latestVersion, $previousVersion] = getLatestAndPreviousVersions($allVersions);
$page++;
}
echo "Latest version: $latestVersion\n";
echo "Previous version: $previousVersion\n";
if ($latestVersion) {
echo "Replacing the latest version in the docker file...\n";
replaceLatestWordPressVersion($latestVersion);
} else {
echo "No latest version found.\n";
}
if ($previousVersion) {
echo "Replacing the previous version in the config file...\n";
// We install previous WordPress version via CLI so we need a version without PHP in the name.
$previousVersion = preg_replace('/-php\d+\.\d+$/', '', $previousVersion);
replacePreviousWordPressVersion($previousVersion);
} else {
echo "No previous version found.\n";
}
saveVersionsToFiles($latestVersion, $previousVersion, 'wordpress_version.txt');

156
.github/workflows/scripts/helpers.php vendored Normal file
View File

@ -0,0 +1,156 @@
<?php
/**
* Function replacing versions in a file by the regex pattern.
*/
function replaceVersionInFile(string $filePath, string $pattern, string $replacement): void {
$content = file_get_contents($filePath);
if ($content === false) {
die("Failed to read the file at $filePath.");
}
$updatedContent = preg_replace($pattern, $replacement, $content);
if ($updatedContent === null || $updatedContent === $content) {
echo "Nothing to update in $filePath\n";
return;
}
if (file_put_contents($filePath, $updatedContent) === false) {
die("Failed to write the updated file at $filePath.");
}
}
/**
* Function to filter stable versions from a list of versions.
*/
function filterStableVersions(array $versions): array {
return array_filter($versions, function($version) {
// Only include stable versions (exclude versions with -rc, -beta, -alpha, etc.)
return preg_match('/^\d+\.\d+\.\d+$/', $version);
});
}
/**
* Function to get the latest and previous minor/major versions from a list of versions.
*/
function getLatestAndPreviousMinorMajorVersions(array $versions): array {
usort($versions, 'version_compare');
$currentVersion = end($versions);
$previousVersion = null;
foreach (array_reverse($versions) as $version) {
if (version_compare($version, $currentVersion, '<') && getMinorMajorVersion($version) !== getMinorMajorVersion($currentVersion)) {
$previousVersion = $version;
break;
}
}
return [$currentVersion, $previousVersion];
}
function getMinorMajorVersion(string $version): string {
$parts = explode('.', $version);
return $parts[0] . '.' . $parts[1];
}
/**
* Function to fetch tags from a GitHub repository.
*/
function fetchGitHubTags(string $repo, string $token, int $page = 1, int $limit = 50): array {
$url = "https://api.github.com/repos/$repo/tags?per_page=$limit&page=$page";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); // GitHub API requires a user agent
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: token $token"
]);
$response = curl_exec($ch);
curl_close($ch);
if ($response === false) {
die("Failed to fetch tags from GitHub.");
}
$data = json_decode($response, true);
if (isset($data['message']) && $data['message'] == 'Not Found') {
die("Repository not found or access denied.");
}
return array_column($data, 'name');
}
/**
* Function saving versions to a temporary files.
* File containing latest version is prefixed with 'latest_' and previous version is prefixed with 'previous_'.
*/
function saveVersionsToFiles(?string $latestVersion, ?string $previousVersion, string $fileNameSuffix): void {
file_put_contents("/tmp/latest_{$fileNameSuffix}", $latestVersion);
file_put_contents("/tmp/previous_{$fileNameSuffix}", $previousVersion);
}
function replaceLatestVersion(string $latestVersion, string $downloadCommand): void {
replaceVersionInFile(
__DIR__ . '/../../../.circleci/config.yml',
'/(.\/do ' . $downloadCommand . ' )\d+\.\d+\.\d+/',
'${1}' . $latestVersion
);
}
function replacePreviousVersion(string $previousVersion, string $configParameterName): void {
replaceVersionInFile(
__DIR__ . '/../../../.circleci/config.yml',
'/(' . $configParameterName . ': )\d+\.\d+\.\d+/',
'${1}' . $previousVersion
);
}
/**
* Function replacing the latest and previous versions of a private plugin in the config file.
* The function fetches the tags from the GitHub repository, filters stable versions,
* gets the latest and previous minor/major versions, and replaces the versions in the CircleCI config file.
*/
function replacePrivatePluginVersion(
string $repository,
string $downloadCommand,
string $configParameterName,
string $versionsFilename
): void {
// Read the GitHub token from environment variable
$token = getenv('GH_TOKEN');
if (!$token) {
die("GitHub token not found. Make sure it's set in the environment variable 'GH_TOKEN'.");
}
$page = 1;
$latestVersion = null;
$previousVersion = null;
$allVersions = [];
while (($latestVersion === null || $previousVersion === null) && $page < 10) {
$allVersions = array_merge($allVersions, fetchGitHubTags($repository, $token, $page));
$stableVersions = filterStableVersions($allVersions);
[$latestVersion, $previousVersion] = getLatestAndPreviousMinorMajorVersions($stableVersions);
$page++;
}
echo "Latest version: $latestVersion\n";
echo "Previous version: $previousVersion\n";
if ($latestVersion) {
echo "Replacing the latest version in the config file...\n";
replaceLatestVersion($latestVersion, $downloadCommand);
} else {
echo "No latest version found.\n";
}
if ($previousVersion) {
echo "Replacing the previous version in the config file...\n";
replacePreviousVersion($previousVersion, $configParameterName);
} else {
echo "No previous version found.\n";
}
saveVersionsToFiles($latestVersion, $previousVersion, $versionsFilename);
}

View File

@ -1,18 +0,0 @@
name: Pull Request Stats
on:
pull_request:
types: [opened]
branches-ignore:
- 'dependabot/**'
jobs:
stats:
runs-on: ubuntu-latest
steps:
- name: Run pull request stats
uses: flowwer-dev/pull-request-stats@master
with:
period: 90
charts: true
sort-by: 'TIME'

View File

@ -0,0 +1,182 @@
name: Check new versions of plugins and WordPress
on:
schedule:
- cron: '0 6 * * 1' # At 06:00 on Monday
workflow_dispatch: # Allows manual triggering
jobs:
check-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3' # Specify the PHP version you want to use
# Updating used WordPress
- name: Check WordPress Docker Versions
run: php .github/workflows/scripts/check_wordpress_versions.php
- name: Check for WordPress changes
id: check_wp_changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
if [ "$(git status --porcelain)" != "" ]; then
echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
echo "WORDPRESS_CHANGES=true" >> $GITHUB_ENV
fi
- name: Get WordPress versions from files
id: get_wp_versions
run: |
echo "WORDPRESS_LATEST_VERSION=$(cat /tmp/latest_wordpress_version.txt)" >> $GITHUB_ENV
echo "WORDPRESS_PREVIOUS_VERSION=$(cat /tmp/previous_wordpress_version.txt)" >> $GITHUB_ENV
- name: Commit WordPress changes
if: env.WORDPRESS_CHANGES == 'true'
run: |
git add .
git commit -m $'Update used WordPress images in Circle CI\n\n - latest version: ${{ env.WORDPRESS_LATEST_VERSION }}\n - previous version: ${{ env.WORDPRESS_PREVIOUS_VERSION }}'
# Updating used WooCommerce plugin
- name: Check WooCommerce Versions
run: php .github/workflows/scripts/check_woocommerce_versions.php
- name: Check for WooCommerce changes
id: check_wc_changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
if [ "$(git status --porcelain)" != "" ]; then
echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
echo "WOOCOMMERCE_CHANGES=true" >> $GITHUB_ENV
fi
- name: Get WooCommerce versions from files
id: get_wc_versions
run: |
echo "WOOCOMMERCE_LATEST_VERSION=$(cat /tmp/latest_woocommerce_version.txt)" >> $GITHUB_ENV
echo "WOOCOMMERCE_PREVIOUS_VERSION=$(cat /tmp/previous_woocommerce_version.txt)" >> $GITHUB_ENV
- name: Commit WooCommerce changes
if: env.WOOCOMMERCE_CHANGES == 'true'
run: |
git add .
git commit -m $'Update used WooCommerce plugin in Circle CI\n\n - latest version: ${{ env.WOOCOMMERCE_LATEST_VERSION }}\n - previous version: ${{ env.WOOCOMMERCE_PREVIOUS_VERSION }}'
# Updating used Automate Woo plugin
- name: Check Automate Woo Versions
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: php .github/workflows/scripts/check_automate_woo_versions.php
- name: Check for Automate Woo changes
id: check_aw_changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
if [ "$(git status --porcelain)" != "" ]; then
echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
echo "AUTOMATE_WOO_CHANGES=true" >> $GITHUB_ENV
fi
- name: Get Automate Woo versions from files
id: get_aw_versions
run: |
echo "AUTOMATE_WOO_LATEST_VERSION=$(cat /tmp/latest_automate_woo_version.txt)" >> $GITHUB_ENV
echo "AUTOMATE_WOO_PREVIOUS_VERSION=$(cat /tmp/previous_automate_woo_version.txt)" >> $GITHUB_ENV
- name: Commit Automate Woo changes
if: env.AUTOMATE_WOO_CHANGES == 'true'
run: |
git add .
git commit -m $'Update used Automate Woo plugin in Circle CI\n\n - latest version: ${{ env.AUTOMATE_WOO_LATEST_VERSION }}\n - previous version: ${{ env.AUTOMATE_WOO_PREVIOUS_VERSION }}'
# Updating used WooCommerce Subscriptions plugin
- name: Check WooCommerce Subscriptions Versions
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: php .github/workflows/scripts/check_woocommerce_subscriptions_versions.php
- name: Check for WooCommerce Subscriptions changes
id: check_ws_changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
if [ "$(git status --porcelain)" != "" ]; then
echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
echo "SUBSCRIPTIONS_CHANGES=true" >> $GITHUB_ENV
fi
- name: Get WooCommerce Subscriptions versions from files
id: get_ws_versions
run: |
echo "WOOCOMMERCE_SUBSCRIPTIONS_LATEST_VERSION=$(cat /tmp/latest_woocommerce_subscriptions_version.txt)" >> $GITHUB_ENV
echo "WOOCOMMERCE_SUBSCRIPTIONS_PREVIOUS_VERSION=$(cat /tmp/previous_woocommerce_subscriptions_version.txt)" >> $GITHUB_ENV
- name: Commit WooCommerce Subscriptions changes
if: env.SUBSCRIPTIONS_CHANGES == 'true'
run: |
git add .
git commit -m $'Update used WooCommerce Subscriptions plugin in Circle CI\n\n - latest version: ${{ env.WOOCOMMERCE_SUBSCRIPTIONS_LATEST_VERSION }}\n - previous version: ${{ env.WOOCOMMERCE_SUBSCRIPTIONS_PREVIOUS_VERSION }}'
# Updating used WooCommerce Memberships plugin
- name: Check WooCommerce Memberships Versions
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: php .github/workflows/scripts/check_woocommerce_memberships_versions.php
- name: Check for WooCommerce Memberships changes
id: check_wm_changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
if [ "$(git status --porcelain)" != "" ]; then
echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
echo "MEMBERSHIPS_CHANGES=true" >> $GITHUB_ENV
fi
- name: Get WooCommerce Memberships versions from files
id: get_wm_versions
run: |
echo "WOOCOMMERCE_MEMBERSHIPS_LATEST_VERSION=$(cat /tmp/latest_woocommerce_memberships_version.txt)" >> $GITHUB_ENV
echo "WOOCOMMERCE_MEMBERSHIPS_PREVIOUS_VERSION=$(cat /tmp/previous_woocommerce_memberships_version.txt)" >> $GITHUB_ENV
- name: Commit WooCommerce Memberships changes
if: env.MEMBERSHIPS_CHANGES == 'true'
run: |
git add .
git commit -m $'Update used WooCommerce Memberships plugin in Circle CI\n\n - latest version: ${{ env.WOOCOMMERCE_MEMBERSHIPS_LATEST_VERSION }}\n - previous version: ${{ env.WOOCOMMERCE_MEMBERSHIPS_PREVIOUS_VERSION }}'
# Push all changes at the end if any changes were detected
#
# For local testing with act tool add following:
# env:
# GH_PAT: ${{ secrets.GH_TOKEN }}
# run: |
# git remote set-url origin https://${GH_PAT}@github.com/mailpoet/mailpoet
# git push -f origin HEAD:refs/heads/update-plugins-and-wordpress-test
- name: Push changes
if: env.CHANGES_DETECTED == 'true'
run: |
git push -f origin HEAD:refs/heads/update-plugins-and-wordpress
# Create a pull request if there are changes
- name: Create Pull Request
if: env.CHANGES_DETECTED == 'true'
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GH_TOKEN }}
branch: update-plugins-and-wordpress
title: Update WordPress and plugins in CI jobs
base: trunk
labels: automated, check-versions
body: |
1. If all checks passed, you can merge this PR.
2. If the build failed, please investigate the failure and either address the issues or delegate the job. Then, make sure these changes are merged.

42
.husky/common.sh Executable file
View File

@ -0,0 +1,42 @@
#!/usr/bin/env bash
. "$(dirname "$0")/../mailpoet/.env"
export MP_GIT_HOOKS_ENABLE="${MP_GIT_HOOKS_ENABLE:-true}"
export MP_GIT_HOOKS_ESLINT="${MP_GIT_HOOKS_ESLINT:-true}"
export MP_GIT_HOOKS_STYLELINT="${MP_GIT_HOOKS_STYLELINT:-true}"
export MP_GIT_HOOKS_PHPLINT="${MP_GIT_HOOKS_PHPLINT:-true}"
export MP_GIT_HOOKS_CODE_SNIFFER="${MP_GIT_HOOKS_CODE_SNIFFER:-true}"
export MP_GIT_HOOKS_MINIMAL_PLUGIN_STANDARDS="${MP_GIT_HOOKS_MINIMAL_PLUGIN_STANDARDS:-true}"
export MP_GIT_HOOKS_PHPSTAN="${MP_GIT_HOOKS_PHPSTAN:-true}"
export MP_GIT_HOOKS_INSTALL_JS="${MP_GIT_HOOKS_INSTALL_JS:-false}"
export MP_GIT_HOOKS_INSTALL_PHP="${MP_GIT_HOOKS_INSTALL_PHP:-false}"
fileChanged() {
local filePattern="$1"
local changedFiles="$2"
if echo "$changedFiles" | grep -qE "$filePattern"; then
return 0
else
return 1
fi
}
installIfUpdates() {
local changedFiles="$(git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD)"
if [ "$MP_GIT_HOOKS_INSTALL_JS" = "true" ] && fileChanged "pnpm-lock.yaml" "$changedFiles"; then
echo "Change detected in pnpm-lock.yaml, running do install:js"
pushd mailpoet
./do install:js
popd
fi
if [ "$MP_GIT_HOOKS_INSTALL_PHP" = "true" ] && fileChanged "mailpoet/composer.lock" "$changedFiles"; then
echo "Change detected in mailpoet/composer.lock, running do install:php"
pushd mailpoet
./do install:php
popd
fi
}

6
.husky/post-checkout Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
[ "$MP_GIT_HOOKS_ENABLE" != "true" ] && exit 0
installIfUpdates

7
.husky/post-merge Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
[ "$MP_GIT_HOOKS_ENABLE" != "true" ] && exit 0
installIfUpdates

7
.husky/post-rewrite Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
[ "$MP_GIT_HOOKS_ENABLE" != "true" ] && exit 0
installIfUpdates

View File

@ -1,5 +1,7 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
[ "$MP_GIT_HOOKS_ENABLE" != "true" ] && exit 0
npx lint-staged -c mailpoet/package.json --cwd mailpoet
npx lint-staged -c package.json

View File

@ -1,56 +1,51 @@
# Contributing
There is a `./do` command that helps with the development process. See [README](README.md) for more details.
## PHP Code
- Two spaces indentation.
- Space between keyword (if, for, switch...) and left bracket
- CamelCase for classes.
- camelCase for methods.
- snake_case for variables and class properties.
- Space between keyword and left bracket (`if ()`, `for ()`, `switch ()`...).
- `CamelCase` for classes.
- `camelCase` for methods.
- `snake_case` for variables and class properties.
- Composition over Inheritance.
- Comments are a code smell. If you need to use a comment - see if same idea can be achieved by more clearly expressing code.
- Require other classes with 'use' at the beginning of the class file.
- Do not specify 'public' if method is public, it's implicit.
- Require other classes with `use` at the beginning of the class file.
- Always use guard clauses.
- Ensure compatibility with PHP 7.1 and newer versions.
- Ensure compatibility with PHP 7.4 and newer versions.
- Cover your code in tests.
## SCSS Code
- camelCase for file name
- Components files are prefixed with underscore, to indicate, that they aren't compiled separately.
- `kebab-case` for file names.
- Components files are prefixed with underscore, to indicate, that they aren't compiled separately (`_new-component.scss`).
## JS Code
- Javascript code should follow the [Airbnb style guide](https://github.com/airbnb/javascript).
- Prefer named export before default export in JS and TS files
- Default to TypeScript for new files.
## Disabling linting rules
- we want to avoid using `eslint-disable`
- if we have to use it we need to use a comment explaining why do we need it:
- We want to avoid using `eslint-disable`
- If we have to use it we need to use a comment explaining why do we need it:
`/* eslint-disable no-new -- this class has a side-effect in the constructor and it's a library's. */`
- for PHP we do the same with the exception `// phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps` which for now doesnt require an explanation
- For PHP we do the same with the exception `// phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps` which for now doesnt require an explanation
## Git flow
- Do not commit to trunk.
- Open a short-living feature branch.
- Open a pull request.
- Add Jira issue reference in the title of the Pull Request.
- Work on the pull request.
- Use good commit messages as explained here https://chris.beams.io/posts/git-commit. Include Jira ticket in the commit message.
- Use the `./do qa` command to check your code style before pushing.
- Use good commit messages as explained here https://chris.beams.io/posts/git-commit
- Create a pull request when finished. Include Jira ticket in the title of the pull request.
- Wait for review from another developer.
## Issues creation
## Feature flags
- Issues are managed on Jira.
- Discuss issues on public Slack chats, discuss code in pull requests.
- Open a small Jira issue only when it has been discussed.
We use feature flags to control the visibility of new features. This allows us to work on new features in smaller chunks before they are released to all customers.
## Migration from IdiORM to Doctrine
MailPoet used to use [IdiORM](https://github.com/j4mie/idiorm) as its object-relational mapper (ORM), but the project was abandoned a while ago, so we started a migration to [Doctrine](https://www.doctrine-project.org/). This is a significant effort that has been going on for quite some time. Although you will still see parts of the code that use IdioORM, we ask that all new code be added using Doctrine instead.
All IdioORM models live in [mailpoet/lib/Models](https://github.com/mailpoet/mailpoet/tree/trunk/mailpoet/lib/Models), should be considered deprecated and shouldn't be used by new code. We are moving everything to Doctrine entities and some auxiliary code when needed. You can find Doctrine entities in [mailpoet/lib/Entities](https://github.com/mailpoet/mailpoet/tree/trunk/mailpoet/lib/Entities).
- Feature flags can be enabled on the experimental page: `/admin.php?page=mailpoet-experimental`.
- New feature flags can be added in the class `FeaturesController`.

View File

@ -1,20 +1,41 @@
# MailPoet
### Table of Contents
1. [MailPoet](#mailpoet)
2. [Initial setup](#initial-setup)
1. [Additional dependencies](#additional-dependencies)
3. [Xdebug](#xdebug)
1. [PhpStorm setup](#phpstorm-setup)
2. [Xdebug develop mode](#xdebug-develop-mode)
3. [Xdebug for integration tests](#xdebug-for-integration-tests)
4. [Local development](#local-development)
1. [NFS volume sharing for Mac](#nfs-volume-sharing-for-mac)
2. [Husky hooks](#husky-hooks)
5. [Docker](#docker)
1. [Commands](#commands)
2. [Available PHP versions](#available-php-versions)
3. [Disabling the Tracy panel](#disabling-the-tracy-panel)
4. [Running individual tests](#running-individual-tests)
6. [TODO](#todo)
## MailPoet
The **MailPoet** plugin monorepo.
If you have **any questions or need help or support**, please see the [Support](SUPPORT.md) document.
To use our Docker-based development environment (recommended), continue with the steps below.
If you'd like to use the plugin code directly, see details in [the plugin's readme](mailpoet/README.md).
## 🔌 Initial setup
## Initial setup
1. Run `./do setup` to pull everything and install necessary dependencies.
2. Add secrets to `.env` files in `mailpoet` and `mailpoet-premium` directories. Go to the Secret Store and look for "MailPoet: plugin .env"
3. Run `./do start` to start the stack.
4. Go to http://localhost:8888 to see the dashboard of the dev environment.
## Additional dependencies
### Additional dependencies
Even though it possible to run everything using Docker, in the development workflow,
Even though it's possible to run everything using Docker, in the development workflow,
it may be faster and more convenient to run some tasks outside the container. Therefore,
the following tools are recommended:
@ -22,7 +43,9 @@ the following tools are recommended:
2. **Node.js**, as specified by `.nvmrc`. For automatic management use [nvm](https://github.com/nvm-sh/nvm), [FNM](https://github.com/Schniz/fnm), or [Volta](https://github.com/volta-cli/volta).
3. **pnpm**, as specified in `package.json`. For automatic setup enable [Corepack](https://nodejs.org/docs/latest-v17.x/api/corepack.html) using `corepack enable`.
## 🔍 PHPStorm setup for XDebug
## Xdebug
### PhpStorm setup
In `Languages & Preferences > PHP > Servers` set path mappings:
@ -39,7 +62,7 @@ To use XDebug inside the **cron**, you need to pass a URL argument `&XDEBUG_TRIG
[in the cron request](https://github.com/mailpoet/mailpoet/blob/bf7bd6d2d9090ed6ec7b8b575bb7d6b08e663a52/lib/Cron/CronHelper.php#L155-L166).
Alternatively, you can add `XDEBUG_TRIGGER: yes` to the `wordpress` service in `docker-compose.yml` and restart it (which will run XDebug also for all other requests).
## Xdebug develop mode
### Xdebug develop mode
[Xdebug develop mode](https://xdebug.org/docs/develop) is disabled by default because it causes performance issues due to conflicts with the DI container.
@ -50,7 +73,7 @@ environment:
XDEBUG_MODE: debug, develop
```
## Xdebug for integration tests
### Xdebug for integration tests
- In Languages & Preferences > PHP > Servers create a new sever named `MailPoetTest`, set the host to `localhost` and port to `80` and set following path mappings:
@ -62,10 +85,12 @@ mailpoet/vendor/bin/codecept -> /project/vendor/bin/codecept
mailpoet/vendor/bin/wp -> /usr/local/bin/wp
```
- Add `XDEBUG_TRIGGER: 1` environment to `mailpoet/tests/docker/docker-compose.yml` -> codeception service to start triggering Xdebug
- Add `XDEBUG_TRIGGER: 1` environment to `tests_env/docker/docker-compose.yml` -> codeception service to start triggering Xdebug
- Make PHPStorm listen to connections by clicking on the phone icon
## 💾 NFS volume sharing for Mac
## Local development
### NFS volume sharing for Mac
NFS volumes can bring more stability and performance on Docker for Mac. To setup NFS volume sharing run:
@ -85,7 +110,7 @@ docker-compose up -d
**NOTE:** If you are on MacOS Catalina or newer, make sure to put the repository
outside your `Documents` folder, otherwise you may run into [file permission issues](https://objekt.click/2019/11/docker-the-problem-with-macos-catalina/).
# 🐶 Husky
### Husky hooks
We use [Husky](https://github.com/typicode/husky) to run automated checks in pre-commit hooks.
@ -100,7 +125,9 @@ export NVM_DIR="$HOME/.nvm"
Without it, you may experience errors in some Git clients.
## 🕹 Commands
## Docker
### Commands
The `./do` script define aliases for most of the commands you will need while working on plugins:
@ -122,11 +149,7 @@ Options:
You can access this help in your command line running `./do` without parameters.
## ✉️ Adding new templates to the plugin
[Read the article.](https://mailpoet.atlassian.net/wiki/spaces/MAILPOET/pages/629374977/Adding+new+templates+to+the+plugin)
## 🚥 Testing with different PHP versions
### Available PHP versions
To switch the environment to a different PHP version:
@ -146,7 +169,7 @@ To switch the environment to a different PHP version:
To switch back to the default PHP version remove what was added in 2) and, run `docker-compose build wordpress` for application container and `docker-compose build test_wordpress` for tests container,
and start the stack using `./do start`.
## Disabling the Tracy panel
### Disabling the Tracy panel
To disable the Tracy panel, add the following to `docker-compose.override.yml`:
@ -157,6 +180,39 @@ services:
MAILPOET_DISABLE_TRACY_PANEL: 1
```
## ✅ TODO
### Running individual tests
- install woo commerce, members and other useful plugins by default
It's recommended to run tests in Docker. Free plugin tests can be run using --test flag (`./do --test`). However, to run a premium test, you need to ssh into test container (`./do ssh --test`) and run tests there.
#### Integration test in the free plugin
```shell
./do --test test:integration --skip-deps --file=tests/integration/WP/EmojiTest.php
```
#### Acceptance test in the free plugin
```shell
./do --test test:acceptance --skip-deps --file=tests/acceptance/Misc/MailpoetMenuCest.php
```
#### Unit/integration test in the premium plugin
```shell
./do ssh --test # to enter the container
cd ../mailpoet-premium # switch to premium plugin directory
./do test:unit --file=tests/unit/Config/EnvTest.php
```
#### Acceptance test in the premium plugin
```shell
cd ./mailpoet-premium # switch to premium plugin directory on your local machine
./do test:acceptance --skip-deps --file tests/acceptance/PremiumCheckCest.php
```
## TODO
- [ ] Install WooCommerce
- [ ] Install Members
- [ ] Install other useful plugins by default

View File

@ -1,23 +1,5 @@
# Getting Support
# Support
Welcome to MailPoet!
This isn't the right place to get support for using MailPoet,
but the following resources are available below,
thanks for understanding.
Please visit our [Support](https://www.mailpoet.com/support/) page. We have a team of Happiness Engineers ready to help you.
- [Support](https://www.mailpoet.com/support)
- [Feature Requests](https://feedback.mailpoet.com)
_DO NOT_ use the issue tracker to ask questions;
use the links above for that.
Questions posed to the issue tracker will be closed.
When reporting an issue, please include the following details:
- A narrative description of what you are trying to accomplish.
- The expected results.
- The actual results received.
- We may ask for additional details: what version of the plugin you are using, and what PHP version
was used to reproduce the issue.
You may also submit a failing test case as a pull request.
For feature requests, please use our [tracker](https://feedback.mailpoet.com).

View File

@ -27,7 +27,7 @@ RUN printf "account default\nhost smtp\nport 1025" > /etc/msmtprc
# xdebug build an config
ENV XDEBUGINI_PATH=/usr/local/etc/php/conf.d/xdebug.ini
RUN git clone -b "3.0.2" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
RUN git clone -b "3.3.1" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
&& docker-php-ext-configure xdebug --enable-xdebug-dev \
&& docker-php-ext-install xdebug \
&& mkdir /tmp/debug

View File

@ -27,7 +27,7 @@ RUN printf "account default\nhost smtp\nport 1025" > /etc/msmtprc
# xdebug build an config
ENV XDEBUGINI_PATH=/usr/local/etc/php/conf.d/xdebug.ini
RUN git clone -b "3.1.1" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
RUN git clone -b "3.3.1" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
&& docker-php-ext-configure xdebug --enable-xdebug-dev \
&& docker-php-ext-install xdebug \
&& mkdir /tmp/debug

View File

@ -27,7 +27,7 @@ RUN printf "account default\nhost smtp\nport 1025" > /etc/msmtprc
# xdebug build an config
ENV XDEBUGINI_PATH=/usr/local/etc/php/conf.d/xdebug.ini
RUN git clone -b "3.2.0RC2" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
RUN git clone -b "3.3.1" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
&& docker-php-ext-configure xdebug --enable-xdebug-dev \
&& docker-php-ext-install xdebug \
&& mkdir /tmp/debug

View File

@ -27,6 +27,7 @@ Class `\MailPoet\API\API` becomes available once MailPoet plugin is loaded by Wo
- [Add List (addList)](api_methods/AddList.md)
- [Add Subscriber (addSubscriber)](api_methods/AddSubscriber.md)
- [Update Subscriber (updateSubscriber)](api_methods/UpdateSubscriber.md)
- [Add Subscriber Field (addSubscriberField)](api_methods/AddSubscriberField.md)
- [Delete List (deleteList)](api_methods/DeleteList.md)
- [Get Lists (getLists)](api_methods/GetLists.md)

View File

@ -1,6 +1,6 @@
[back to list](../Readme.md)
# Add Subscriber
# Add List
## `array addList(array $list)`

View File

@ -31,6 +31,7 @@ This method throws an `\Exception` in the event a subscriber with a given email
| created_at | string\|null | - | UTC time of creation in 'Y-m-d H:i:s' format |
| updated_at | string | - | UTC time of last update in 'Y-m-d H:i:s' format |
| deleted_at | string\|null | - | This property in not null in case that list is in trash and contains UTC time in 'Y-m-d H:i:s' format. |
| last_subscribed_at | string\|null | - | UTC time of last confirmed subscription in 'Y-m-d H:i:s' format. |
| unconfirmed_data | string\|null | 65K chars | May contain serialized subscriber data in case when there are pending changes waiting for a confirmation from a subscriber |
| source | string\|null | - | Possible values: `form`,`imported`,`administrator`,`api`,`wordpress_user`,`woocommerce_user`,`woocommerce_checkout`,`unknown`) |
| count_confirmations | string | 11 chars | Counter for confirmation emails |

View File

@ -1,6 +1,6 @@
[back to list](../Readme.md)
# Add Subscriber
# Update List
## `array updateList(array $list)`
@ -14,11 +14,11 @@ It returns the updated list. See [Get Lists](GetLists.md) for a list data struct
An associative array which contains list data.
| Property | Type | Limits | Description |
| ---------------------- | ------------ | --------- | -------------------------- |
| id (required) | string | 11 chars | A id of the list. |
| name (required) | string | 90 chars | A name of the list. |
| description (optional) | string\|null | 250 chars | A description of the list. |
| Property | Type | Limits | Description |
| ---------------------- | ------------ | --------- | -------------------------------------------------------------------------- |
| id (required) | string | 11 chars | A id of the list. |
| name (required) | string | 90 chars | A name of the list. |
| description (optional) | string\|null | 250 chars | A description of the list. This will reset the list description when empty |
## Error handling

View File

@ -0,0 +1,33 @@
[back to list](../Readme.md)
# Update Subscriber
## `array updateSubscriber($subscriberIdOrEmail, array $subscriber): array`
This method allows a subscriber to be updated.
The argument `$subscriber` is similar to [Add Subscriber](AddSubscriber.md) method, but the subscriber is updated instead of created.
It returns the updated subscriber. See [Get Subscriber](GetSubscriber.md) for a subscriber data structure.
If the subscriber is a WordPress user, the method does not allow updating `email`, `first_name` and `last_name`. It needs to be updated in the `wp_users` and MailPoet will synchronise the new values.
## Arguments
| Argument | Type | Description |
| -------------------- | ------------- | ----------------------------------------- |
| $subscriberIdOrEmail | string or int | An id or email of an existing subscriber. |
| $subscriber | array | Subscriber data that will be updated |
## Error handling
All expected errors from the API are exceptions of class `\MailPoet\API\MP\v1\APIException`.
Code of the exception is populated to distinguish between different errors.
An exception of base class `\Exception` can be thrown when something unexpected happens.
Codes description:
| Code | Description |
| ---- | -------------------------------------------------- |
| 4 | Updating a subscriber that does not exist. |
| 13 | The subscriber couldnt be updated in the database |

View File

@ -1,5 +1,3 @@
version: '3.8'
services:
dashboard:
container_name: mp-dashboard
@ -33,7 +31,6 @@ services:
GID: ${GID:-1000}
ports:
- '8002:80'
- '8083:8083' # Storybook port number, see package.json
depends_on:
- db
- smtp

View File

@ -44,3 +44,14 @@ WP_TEST_PERFORMANCE_DATA_URL=
WP_TEST_PERFORMANCE_PW=
K6_CLOUD_TOKEN=
K6_CLOUD_ID=
# git hooks configuration (must be 'true' to enable)
MP_GIT_HOOKS_ENABLE=true
MP_GIT_HOOKS_ESLINT=true
MP_GIT_HOOKS_STYLELINT=true
MP_GIT_HOOKS_PHPLINT=true
MP_GIT_HOOKS_CODE_SNIFFER=true
MP_GIT_HOOKS_MINIMAL_PLUGIN_STANDARDS=true
MP_GIT_HOOKS_PHPSTAN=true
MP_GIT_HOOKS_INSTALL_JS=false
MP_GIT_HOOKS_INSTALL_PHP=false

1
mailpoet/.gitignore vendored
View File

@ -26,5 +26,4 @@ tasks/code_sniffer/vendor
tasks/phpstan/vendor
tasks/phpstan/_phpstan-wp-source.neon
/tools/vendor
/storybook-static
assets/js/src/newsletter-editor/behaviors/tinymce-icons.js

View File

@ -1,48 +0,0 @@
const path = require('path');
const modulesDir = path.join(__dirname, '../node_modules');
console.log('NODE', modulesDir);
// Workaround for Emotion 11
// https://github.com/storybookjs/storybook/pull/13300#issuecomment-783268111
const updateEmotionAliases = (config) => ({
...config,
resolve: {
...config.resolve,
alias: {
...config.resolve.alias,
'@emotion/core': path.join(modulesDir, '@emotion/react'),
'@emotion/styled': path.join(modulesDir, '@emotion/styled'),
'@emotion/styled-base': path.join(modulesDir, '@emotion/styled'),
'emotion-theming': path.join(modulesDir, '@emotion/react'),
},
},
});
module.exports = {
core: {
builder: 'webpack5',
},
stories: ['../assets/js/src/**/_stories/*.tsx'],
webpackFinal: (config) => {
config.resolve.modules = ['node_modules', '../assets/js/src'];
return updateEmotionAliases(config);
},
managerWebpack: updateEmotionAliases,
addons: [
'@storybook/addon-actions',
'@storybook/addon-links',
'storybook-addon-performance/register',
{
name: '@storybook/addon-storysource',
options: {
rule: {
test: [/_stories\/.*\.tsx?$/],
include: [path.resolve(__dirname, '../assets/js/src')],
},
loaderOptions: {
parser: 'typescript',
},
},
},
],
};

View File

@ -1,14 +0,0 @@
import React from 'react';
import { addDecorator } from '@storybook/react';
import { withPerformance } from 'storybook-addon-performance';
import '../assets/css/src/storybook/wordpress-5.8.2.css';
import '../assets/dist/css/mailpoet-plugin.css';
import '../assets/dist/css/mailpoet-form-editor.css';
addDecorator(withPerformance);
addDecorator((story) => (
<div className="wp-core-ui" id="wpbody">
<div id="mailpoet-modal"></div>
{story()}
</div>
));

2653
mailpoet/CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +1,28 @@
# MailPoet
### Table of Contents
The **MailPoet** plugin.
1. [MailPoet](#mailpoet)
2. [Setup](#setup)
1. [Requirements](#requirements)
2. [Installation](#installation)
3. [Frameworks and libraries](#frameworks-and-libraries)
3. [Workflow Commands](#workflow-commands)
4. [Coding and Testing](#coding-and-testing)
1. [DI](#di)
2. [PHP-Scoper](#php-scoper)
3. [i18n](#i18n)
4. [Acceptance testing](#acceptance-testing)
To use the official Docker-based development environment, see details
in [the readme file](../README.md) in the root of this repository. If
you'd like to use the plugin code directly, you can follow the instructions
below.
## MailPoet
## Contents
- [Setup](#setup)
- [Frameworks and libraries](#frameworks-and-libraries)
- [Workflow Commands](#workflow-commands)
- [Coding and Testing](#coding-and-testing)
- For help with product, visit [SUPPORT](../SUPPORT.md).
- To use the Docker-based development environment, see [monorepo README](../README.md).
- To use plugin code directly, follow instructions below.
## Setup
### Requirements
- PHP >= 7.3 (only for the development environment, to run the plugin PHP >= 7.2 is required)
- PHP >= 7.4
- NodeJS
- WordPress
@ -46,9 +50,8 @@ cp .env.sample .env
./do compile:all
```
## Frameworks and libraries
### Frameworks and libraries
- [Paris ORM](https://github.com/j4mie/paris).
- [Symfony/dependency-injection](https://github.com/symfony/dependency-injection) ([docs for 3.4](https://symfony.com/doc/3.4/components/dependency_injection.html)).
- [PHP-Scoper](https://github.com/humbug/php-scoper) for moving dependencies into MP namespace
- [Twig](https://twig.symfony.com/) and [Handlebars](https://handlebarsjs.com/) are used for templates rendering.
@ -65,6 +68,13 @@ cp .env.sample .env
## Workflow Commands
There are two different `./do` commands. One is in the free MailPoet directory and runs the commands on the local computer. The second is in the repository root and runs the commands in a Docker container.
Running `./do` commands in the repository root will run the command in the Docker container.
It is recommended to run the assets commands directly in the free MailPoet directory. That means installing the dependencies locally. Running the js and css compilation commands within the container is possible, but it is slower.
On the other hand, the tests should be run in the container. The container has all the necessary dependencies installed and configured. And there is a database running. See more details in the README.md in the repository root.
```bash
$ ./do install # install PHP and JS dependencies
$ ./do update # update PHP and JS dependencies
@ -117,34 +127,6 @@ $ ./do container:dump # Generates DI container cache.
$ ./do generate:data [<generatorName>] [<threads>] # Generates random usage data (Note: requires WooCommerce active) e.g. ./do generate:data past_revenues 4
```
## Storybook
We use [Storybook.js](https://storybook.js.org/) to showcase our React components, which can be used throughout the plugin.
### Usage
Currently, we don't have Storybook published publicly, so developers need to run or build it locally.
To run it locally (on `http://localhost:8083`) while watching the changes (recommended when developing new component), run
```bash
./do storybook:watch
```
To build the static version, which can be accessed via browser, run
```bash
./do storybook:build
```
which will create a `storybook-static` folder with all necessary files. Don't forget to rebuild it when new components are added.
### Building new components
- All stories should be located in `_stories` folder inside the component folder they belong to.
- Run `./do storybook:watch` so all changes are automatically reflected in `http://localhost:8083`.
- Examples are available in `assets/js/src/storybook_demo/_stories` folder.
## Coding and Testing
### DI
@ -160,9 +142,23 @@ Dependencies handled by PHP-Scoper are configured in extra configuration files `
### i18n
We use functions `__()`, `_n()`, `_x()`, and `_nx()` with domain `mailpoet` to translate strings.
We use functions `__()`, `_n()`, `_x()`, and `_nx()` with domain `mailpoet` to translate strings. Please follow [best practices](https://codex.wordpress.org/I18n_for_WordPress_Developers).
**in PHP code**
#### Comments for translators
When the translation string can be ambiguous, add [a translators comment](https://codex.wordpress.org/I18n_for_WordPress_Developers#Descriptions) for clarification. Don't use `_x()` or `_xn()` for clarification.
```php
// translators:
$customErrorMessage = sprintf(
// translators: %1$s is the link, %2$s is the error message.
__('Please see %1$s for more information. %2$s.', 'mailpoet'),
'https://kb.mailpoet.com',
$errorMessage
);
```
#### In PHP code
```php
__('text to translate', 'mailpoet');
@ -171,7 +167,7 @@ _x('text to translate', 'context', 'mailpoet');
_xn('single text', 'plural text', $number, 'context', 'mailpoet');
```
**in JavaScript/TypeScript code**
#### In JavaScript/TypeScript code
```ts
import { __, _n, _x, _xn } from '@wordpress/i18n';
@ -225,7 +221,7 @@ If you want to run only a single test use the parameter `--file`:
The argument `--skip-deps` is useful locally to speed up the run.
If there are some unexpected errors you can delete all the runtime and start again.
To delete all the docker runtime for acceptance tests use the command `./do d:d`.
To delete all the docker runtime for acceptance tests use the command `./do delete:docker`.
When debugging you can add `$i->pause();` in to your test which pauses the execution.

View File

@ -28,6 +28,14 @@ class RoboFile extends \Robo\Tasks {
->run();
}
public function installPhp() {
return $this->taskExecStack()
->stopOnFail()
->exec('./tools/vendor/composer.phar install')
->addCode([$this, 'cleanupCachedFiles'])
->run();
}
public function installJs() {
return $this->taskExecStack()
->stopOnFail()
@ -75,12 +83,8 @@ class RoboFile extends \Robo\Tasks {
}, ARRAY_FILTER_USE_KEY);
$excludePackages = [
'tinymce',
'react-router-dom', // MAILPOET-3911
'react-tooltip', // MAILPOET-5482
'codemirror', // MAILPOET-5483
'@babel/preset-env', // MAILPOET-5489
'react-string-replace', // MAILPOET-5490
'babel-loader', // MAILPOET-5491
'stylelint', // MAILPOET-5462
'backbone', // Will remove with new email editor
@ -183,7 +187,7 @@ class RoboFile extends \Robo\Tasks {
$this->_exec('./node_modules/webpack/bin/webpack.js --watch');
}
public function compileAll($opts = ['env' => null]) {
public function compileAll($opts = ['env' => null, 'skip-tests' => false, 'only-tests' => false]) {
$collection = $this->collectionBuilder();
$collection->addCode(function() use ($opts) {
return call_user_func([$this, 'compileJs'], $opts);
@ -194,15 +198,17 @@ class RoboFile extends \Robo\Tasks {
return $collection->run();
}
public function compileJs($opts = ['env' => null]) {
public function compileJs($opts = ['env' => null, 'skip-tests' => false, 'only-tests' => false]) {
if (!is_dir('assets/dist/js')) {
mkdir('assets/dist/js', 0777, true);
}
$this->_exec('rm -rf ' . __DIR__ . '/assets/dist/js/*');
if (!$opts['only-tests']) {
$this->_exec('rm -rf ' . __DIR__ . '/assets/dist/js/*');
}
$env = ($opts['env']) ?
sprintf('./node_modules/.bin/cross-env NODE_ENV="%s"', $opts['env']) :
null;
return $this->_exec($env . ' ./node_modules/webpack/bin/webpack.js');
return $this->_exec($env . ' ./node_modules/webpack/bin/webpack.js --env BUILD_TESTS=' . ($opts['skip-tests'] ? 'skip' : 'build') . '--env BUILD_ONLY_TESTS=' . ($opts['only-tests'] ? 'true' : 'false'));
}
public function compileCss($opts = ['env' => null]) {
@ -258,8 +264,6 @@ class RoboFile extends \Robo\Tasks {
'vendor',
'vendor-prefixed',
'RoboFile.php',
'.storybook',
'storybook-static',
]);
$headers = escapeshellarg(
@ -343,15 +347,15 @@ class RoboFile extends \Robo\Tasks {
return $this->_exec($command);
}
public function testIntegration(array $opts = ['file' => null, 'group' => null, 'skip-group' => null, 'xml' => false, 'multisite' => false, 'debug' => false, 'skip-deps' => false, 'skip-plugins' => false, 'enable-cot' => false, 'enable-cot-sync' => false, 'stop-on-fail' => false]) {
public function testIntegration(array $opts = ['file' => null, 'group' => null, 'skip-group' => null, 'xml' => false, 'multisite' => false, 'debug' => false, 'skip-deps' => false, 'skip-plugins' => false, 'disable-hpos' => false, 'enable-hpos-sync' => false, 'enable-hpos' => false, 'stop-on-fail' => false, 'wordpress-version' => null]) {
return $this->runTestsInContainer(array_merge($opts, ['test_type' => 'integration']));
}
public function testMultisiteIntegration($opts = ['file' => null, 'group' => null, 'skip-group' => null, 'xml' => false, 'multisite' => true, 'skip-deps' => false, 'skip-plugins' => false, 'enable-cot' => false, 'enable-cot-sync' => false]) {
public function testMultisiteIntegration($opts = ['file' => null, 'group' => null, 'skip-group' => null, 'xml' => false, 'multisite' => true, 'skip-deps' => false, 'skip-plugins' => false, 'disable-hpos' => false, 'enable-hpos-sync' => false, 'enable-hpos' => false]) {
return $this->runTestsInContainer(array_merge($opts, ['test_type' => 'integration']));
}
public function testWooIntegration(array $opts = ['file' => null, 'xml' => false, 'multisite' => false, 'debug' => false, 'enable-cot' => false, 'enable-cot-sync' => false]) {
public function testWooIntegration(array $opts = ['file' => null, 'xml' => false, 'multisite' => false, 'debug' => false, 'disable-hpos' => false, 'enable-hpos-sync' => false, 'enable-hpos' => false]) {
return $this->runTestsInContainer(array_merge($opts, ['test_type' => 'integration', 'group' => 'woo', 'skip-deps' => true, 'skip-plugins' => false]));
}
@ -363,6 +367,7 @@ class RoboFile extends \Robo\Tasks {
$command = join(' ', [
'./node_modules/.bin/mocha',
'-r tests/javascript-newsletter-editor/mocha-test-helper.js',
'-r tests/javascript-newsletter-editor/mocha-chai.mjs',
'tests/javascript-newsletter-editor/testBundles/**/*.js',
'--exit',
]);
@ -379,7 +384,7 @@ class RoboFile extends \Robo\Tasks {
}
public function testJavascript($xmlOutputFile = null) {
$command = './node_modules/.bin/mocha --recursive --require tests/javascript/babel-register.js tests/javascript --extension spec.js --extension spec.ts';
$command = './node_modules/.bin/mocha --recursive --require tests/javascript/mocha-env.mjs tests/javascript --extension spec.ts';
if (!empty($xmlOutputFile)) {
$command .= sprintf(
@ -399,11 +404,11 @@ class RoboFile extends \Robo\Tasks {
return $this->testIntegration($opts);
}
public function testAcceptance($opts = ['file' => null, 'skip-deps' => false, 'group' => null, 'timeout' => null, 'enable-cot' => false, 'enable-cot-sync' => false]) {
public function testAcceptance($opts = ['file' => null, 'skip-deps' => false, 'group' => null, 'timeout' => null, 'disable-hpos' => false, 'enable-hpos-sync' => false, 'enable-hpos' => false, 'wordpress-version' => null]) {
return $this->runTestsInContainer($opts);
}
public function testPerformance($path = null, $opts = ['url' => null, 'pw' => null, 'head' => false, 'scenario' => null]) {
public function testPerformance($path = null, $opts = ['url' => null, 'us' => null, 'pw' => null, 'head' => false, 'scenario' => null]) {
$dir = __DIR__;
if ((getenv('K6_CLOUD_TOKEN')) === false) {
return $this->collectionBuilder()
@ -412,6 +417,7 @@ class RoboFile extends \Robo\Tasks {
->arg('run')
->option('env', 'K6_BROWSER_ENABLED=1')
->option('env', 'URL=' . $opts['url'])
->option('env', 'US=' . $opts['us'])
->option('env', 'PW=' . $opts['pw'])
->option('env', 'K6_BROWSER_HEADLESS=' . ($opts['head'] ? 'false' : 'true'))
->option('env', 'K6_BROWSER_TIMEOUT=120s')
@ -425,6 +431,7 @@ class RoboFile extends \Robo\Tasks {
->arg('run')
->option('env', 'K6_BROWSER_ENABLED=1')
->option('env', 'URL=' . $opts['url'])
->option('env', 'US=' . $opts['us'])
->option('env', 'PW=' . $opts['pw'])
->option('env', 'HEADLESS=' . ($opts['head'] ? 'false' : 'true'))
->option('env', 'SCENARIO=' . $opts['scenario'])
@ -478,7 +485,7 @@ class RoboFile extends \Robo\Tasks {
->run();
}
public function testAcceptanceMultisite($opts = ['file' => null, 'skip-deps' => false, 'group' => null, 'timeout' => null, 'enable-cot' => false, 'enable-cot-sync' => false]) {
public function testAcceptanceMultisite($opts = ['file' => null, 'skip-deps' => false, 'group' => null, 'timeout' => null, 'disable-hpos' => false, 'enable-hpos-sync' => false, 'enable-hpos' => false]) {
return $this->runTestsInContainer(array_merge($opts, ['multisite' => true]));
}
@ -488,7 +495,7 @@ class RoboFile extends \Robo\Tasks {
public function deleteDocker() {
return $this->taskExec(
'docker-compose down -v --remove-orphans --rmi all'
)->dir(__DIR__ . '/tests/docker')->run();
)->dir(__DIR__ . '/../tests_env/docker')->run();
}
/**
@ -497,8 +504,8 @@ class RoboFile extends \Robo\Tasks {
public function resetTestDocker() {
return $this
->taskExec(
'docker-compose down -v --remove-orphans'
)->dir(__DIR__ . '/tests/docker')
'docker-compose down -v --remove-orphans'
)->dir(__DIR__ . '/../tests_env/docker')
->addCode([$this, 'cleanupCachedFiles'])
->run();
}
@ -643,7 +650,7 @@ class RoboFile extends \Robo\Tasks {
'lib/',
'lib-3rd-party/',
'vendor/composer',
'vendor/mtdowling',
'vendor/dragonmantank',
'vendor-prefixed/',
'vendor-prefixed/soundasleep',
'mailpoet.php',
@ -659,7 +666,7 @@ class RoboFile extends \Robo\Tasks {
'vendor-prefixed/cerdic/css-tidy/COPYING',
'vendor-prefixed/cerdic/css-tidy/NEWS',
'vendor-prefixed/cerdic/css-tidy/testing',
'vendor/mtdowling/cron-expression/tests',
'vendor/dragonmantank/cron-expression/tests',
'vendor/phpmailer/phpmailer/test',
'vendor-prefixed/psr/log/Psr/Log/Test',
'vendor-prefixed/sabberworm/php-css-parser/tests',
@ -845,14 +852,6 @@ class RoboFile extends \Robo\Tasks {
return $this->_exec('./tools/semgrep.sh lib/ lib-3rd-party/');
}
public function storybookBuild() {
return $this->_exec('pnpm run build-storybook');
}
public function storybookWatch() {
return $this->_exec('pnpm run storybook');
}
public function svnCheckout() {
$svnDir = ".mp_svn";
@ -1129,6 +1128,9 @@ class RoboFile extends \Robo\Tasks {
->addCode(function () {
return $this->releaseDownloadZip();
})
->addCode(function () use ($version) {
return $this->releaseVerifyDownloadedZip($version);
})
->addCode(function () {
return $this->translationsGetPotFileFromBuild();
})
@ -1153,6 +1155,9 @@ class RoboFile extends \Robo\Tasks {
->addCode(function () {
return $this->releaseMergePullRequest(\MailPoetTasks\Release\GitHubController::RELEASE_SOURCE_BRANCH);
})
->addCode(function () {
return $this->releaseDeleteDownloadedZip();
})
->run();
}
@ -1311,6 +1316,29 @@ class RoboFile extends \Robo\Tasks {
$this->say("IMPORTANT NOTES \n" . ($outputs[2] ?: 'none'));
}
public function releaseVerifyDownloadedZip($version) {
$this->say('Verifying ZIP file');
$zip = new ZipArchive();
$versionFound = false;
if ($zip->open(self::ZIP_BUILD_PATH) === true) {
$fileContent = $zip->getFromName('mailpoet/readme.txt');
if ($fileContent !== false) {
$versionFound = strpos($fileContent, 'Stable tag: ' . $version);
}
$zip->close();
} else {
$this->yell('ZIP file could not be opened!', 40, 'red');
exit(1);
}
if (!$versionFound) {
$this->yell('ZIP file does not contain required version: "' . $version . '" in readme.txt! ', 40, 'red');
exit(1);
}
$this->say('ZIP file contains required version: "' . $version . '" in readme.txt.');
}
public function releaseDownloadZip() {
$circleciController = $this->createCircleCiController();
$path = $circleciController->downloadLatestBuild(self::ZIP_BUILD_PATH);
@ -1318,6 +1346,12 @@ class RoboFile extends \Robo\Tasks {
$this->say(sprintf('Release ZIP file size: %.2F MB', filesize($path) / pow(1024, 2)));
}
public function releaseDeleteDownloadedZip() {
$this->say('Delete downloaded ZIP: ' . self::ZIP_BUILD_PATH);
$this->taskExec('rm -f ' . self::ZIP_BUILD_PATH)->run();
$this->say('ZIP file was deleted');
}
public function releasePublishGithub($version = null) {
$jiraController = $this->createJiraController();
$version = $jiraController->getVersion($version);
@ -1357,11 +1391,6 @@ class RoboFile extends \Robo\Tasks {
}
}
public function downloadWooCommerceBlocksZip($tag = null) {
$this->createWpOrgDownloader('woo-gutenberg-products-block')
->downloadPluginZip('woo-gutenberg-products-block.zip', __DIR__ . '/tests/plugins/', $tag);
}
public function downloadWooCommerceMembershipsZip($tag = null) {
if (!getenv('WP_GITHUB_USERNAME') && !getenv('WP_GITHUB_TOKEN')) {
$this->yell("Skipping download of WooCommerce Memberships", 40, 'red');
@ -1483,12 +1512,16 @@ class RoboFile extends \Robo\Tasks {
new TwigFileSystem($templatePath)
);
$twig = $renderer->getTwig();
foreach ($this->rsearch($templatePath, ['html','hbs','txt']) as $template) {
foreach ($this->rsearch($templatePath, ['html', 'hbs', 'txt']) as $template) {
$path = substr($template, strlen($templatePath));
$twig->load($path);
}
}
public function emailCreateTemplates() {
return $this->taskExec('vendor/bin/wp mailpoet:email-editor:create-templates');
}
protected function rsearch($folder, $extensions = []) {
$dir = new RecursiveDirectoryIterator($folder);
$iterator = new RecursiveIteratorIterator($dir);
@ -1617,7 +1650,7 @@ class RoboFile extends \Robo\Tasks {
$configuration = (new \MailPoet\Doctrine\ConfigurationFactory($annotationReaderProvider, true))->createConfiguration();
$platformClass = \MailPoet\Doctrine\ConnectionFactory::PLATFORM_CLASS;
return \MailPoetVendor\Doctrine\ORM\EntityManager::create([
'driver' => \MailPoet\Doctrine\ConnectionFactory::DRIVER,
'driverClass' => \MailPoet\Doctrine\ConnectionFactory::DRIVER_CLASS,
'platform' => new $platformClass,
], $configuration);
}
@ -1627,9 +1660,11 @@ class RoboFile extends \Robo\Tasks {
$this->doctrineGenerateCache();
return $this->taskExec(
'COMPOSE_HTTP_TIMEOUT=200 docker-compose run ' .
(isset($opts['wordpress-version']) && $opts['wordpress-version'] ? '-e WORDPRESS_VERSION=' . $opts['wordpress-version'] . ' ' : '') .
(isset($opts['skip-deps']) && $opts['skip-deps'] ? '-e SKIP_DEPS=1 ' : '') .
(isset($opts['enable-cot']) && $opts['enable-cot'] ? '-e ENABLE_COT=1 ' : '') .
(isset($opts['enable-cot-sync']) && $opts['enable-cot-sync'] ? '-e ENABLE_COT_SYNC=1 ' : '') .
(isset($opts['disable-hpos']) && $opts['disable-hpos'] ? '-e DISABLE_HPOS=1 ' : '') .
(isset($opts['enable-hpos-sync']) && $opts['enable-hpos-sync'] ? '-e ENABLE_HPOS_SYNC=1 ' : '') .
(isset($opts['enable-hpos']) && $opts['enable-hpos'] ? '-e ENABLE_HPOS=1 ' : '') .
(isset($opts['skip-plugins']) && $opts['skip-plugins'] ? '-e SKIP_PLUGINS=1 ' : '') .
(isset($opts['timeout']) && $opts['timeout'] ? '-e WAIT_TIMEOUT=' . (int)$opts['timeout'] . ' ' : '') .
(isset($opts['multisite']) && $opts['multisite'] ? '-e MULTISITE=1 ' : '-e MULTISITE=0 ') .
@ -1639,7 +1674,7 @@ class RoboFile extends \Robo\Tasks {
(isset($opts['skip-group']) && $opts['skip-group'] ? '--skip-group ' . $opts['skip-group'] . ' ' : '') .
(isset($opts['stop-on-fail']) && $opts['stop-on-fail'] ? '-f ' : '') .
(isset($opts['file']) && $opts['file'] ? $opts['file'] : '')
)->dir(__DIR__ . '/tests/docker')->run();
)->dir(__DIR__ . '/../tests_env/docker')->run();
}
private function getParallelism(int $multiplier = 1, int $min = 4, int $max = 32): int {

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
@import 'colors';
@import '../components-automation/colors';
.mailpoet-automation-analytics-title {
color: $color-gutenberg-grey-700;
@ -12,7 +12,7 @@
color: $color-gutenberg-grey-900;
}
.mailpoet-analytics-badge {
.mailpoet-automation-status {
display: inline-block;
margin-left: 8px;
}
@ -27,10 +27,6 @@
.woocommerce-filters-filter {
width: 100%;
.components-dropdown__content .components-popover__content {
padding: 0;
}
* {
box-sizing: border-box;
}
@ -42,3 +38,13 @@
}
}
}
.admin_page_mailpoet-automation-analytics {
.woocommerce-filters-date__content .components-popover__content {
padding: 0;
* {
box-sizing: border-box;
}
}
}

View File

@ -1,4 +1,4 @@
@import './colors';
@import '../components-automation/colors';
.mailpoet-automation-analytics-overview {
background: $color-white;

View File

@ -1,4 +1,4 @@
@import '../colors';
@import '../../components-automation/colors';
.mailpoet-automation-editor-stats-placeholder {
.mailpoet-automation-stats-label {
@ -20,8 +20,8 @@
.mailpoet-automation-editor-step-icon {
background: $color-gutenberg-grey-100;
border-radius: 50%;
height: 49px;
width: 49px;
height: 48px;
width: 48px;
}
.mailpoet-automation-editor-step-title {

View File

@ -1,5 +1,4 @@
@import '../colors';
@import 'mixins';
@import '../../components-automation/colors';
.mailpoet-analytics-main-value {
font-size: 13px;
@ -8,14 +7,6 @@
margin: 0 0 4px;
}
.mailpoet-analytics-badge {
font-weight: 600;
}
.mailpoet-analytics-badge-text {
@include badge;
}
.mailpoet-automation-analytics-email-name {
max-width: 300px;
}
@ -24,24 +15,6 @@
font-weight: 600;
}
.mailpoet-analytics-badge-success {
color: $color-gutenberg-alert-green;
.mailpoet-analytics-badge-text {
background: $color-wp-green-0;
color: $color-wp-green-60;
}
}
.mailpoet-analytics-badge-warning {
color: $color-wp-yellow-50;
.mailpoet-analytics-badge-text {
background: $color-wp-yellow-0;
color: $color-wp-yellow-60;
}
}
.mailpoet-automation-analytics-table-subvalue {
color: $color-gutenberg-grey-600;
font-size: 12px;

View File

@ -1,4 +1,4 @@
@import '../colors';
@import '../../components-automation/colors';
.mailpoet-analytics-tabs {
background: $color-white;

View File

@ -1,4 +1,3 @@
@import 'mixins';
@import 'general';
@import 'email';
@import 'orders';

View File

@ -1,12 +0,0 @@
@import '../colors';
@mixin badge {
background: $color-grey;
border-radius: 2px;
font-size: 11px;
font-weight: 400;
line-height: 16px;
margin-right: 4px;
padding: 4px 8px;
white-space: nowrap;
}

View File

@ -1,5 +1,4 @@
@import '../colors';
@import 'mixins';
@import '../../components-automation/colors';
.mailpoet-analytics-tab-orders,
.mailpoet-analytics-tab-subscribers {
@ -15,6 +14,7 @@
}
}
.mailpoet-analytics-activity-modal,
.mailpoet-automation-analytics .woocommerce-table__item {
a.mailpoet-analytics-orders__customer {
align-items: flex-start;
@ -26,7 +26,9 @@
border-radius: 50%;
}
}
}
.mailpoet-automation-analytics .woocommerce-table__item {
.mailpoet-automations-analytics-order-products {
align-items: center;
column-gap: 8px;
@ -56,26 +58,6 @@
}
}
.mailpoet-analytics-order-status {
@include badge;
}
.mailpoet-analytics-order-status-completed,
.mailpoet-analytics-order-status-processing {
background: $color-wp-green-0;
color: $color-wp-green-60;
}
.mailpoet-analytics-order-status-failed {
background: $color-wp-red-0;
color: $color-wp-red-60;
}
.mailpoet-analytics-order-status-on-hold {
background: $color-wp-yellow-0;
color: $color-wp-yellow-60;
}
.mailpoet-analytics-upgrade-banner {
margin: 24px;

View File

@ -1,4 +1,4 @@
@import '../colors';
@import '../../components-automation/colors';
.mailpoet-analytics-clear-filters {
margin-right: 8px;
@ -26,7 +26,7 @@
grid-template-columns: 20px 1fr;
.mailpoet-automation-colored-icon {
padding: 4px;
padding: 2px;
}
p {
@ -39,3 +39,55 @@
grid-column-start: 2;
}
}
.mailpoet-analytics-activity-modal-spinner {
text-align: center;
}
.mailpoet-analytics-activity-modal {
min-width: 500px;
.components-modal__header-heading {
margin-right: 10px;
}
}
.mailpoet-analytics-activity-modal-table {
margin-top: 50px;
}
.mailpoet-analytics-activity-modal-header {
background: $color-white;
.components-modal__header-heading,
.mailpoet-analytics-orders__customer {
font-size: 1.2rem;
height: 20px;
}
}
.mailpoet-analytics-activity-modal-header-spacer {
flex-grow: 1;
}
.mailpoet-analytics-activity-modal-footer {
align-items: center;
color: $color-gutenberg-grey-700;
display: flex;
font-size: 13px;
font-weight: 600;
justify-content: center;
padding-top: 24px;
svg {
margin-right: 10px;
}
}
.mailpoet-analytics-activity-modal-status-info {
max-width: 220px;
&:not(:empty) {
margin-top: 8px;
}
}

View File

@ -9,6 +9,11 @@
.mailpoet-automation-editor-automation-wrapper {
padding: 0 20px 50px;
// Fix for action selector popup on small devices
.components-popover__content {
min-width: 280px;
}
}
.mailpoet-automation-editor-automation-flow {

View File

@ -1,12 +1,15 @@
// See: https://github.com/WordPress/gutenberg/blob/af7da80dd54d7fe52772890e2cc1b65073db9655/packages/block-editor/src/components/block-icon/style.scss
.block-editor-block-icon {
.block-editor-block-icon,
.block-editor-block-icon > div {
align-items: center;
display: flex;
height: 24px;
justify-content: center;
width: 24px;
}
.block-editor-block-icon {
&.has-colors {
svg {
fill: currentColor;
@ -26,9 +29,10 @@
// indicated size.
// See: https://github.com/WordPress/gutenberg/pull/9828
svg {
max-height: 24px;
max-width: 24px;
min-height: 20px;
min-width: 20px;
margin: -4px;
max-height: 32px;
max-width: 32px;
min-height: 26px;
min-width: 26px;
}
}

View File

@ -1,3 +1,40 @@
.mailpoet-automation-editor-edit-site-document-actions {
background: none;
&:hover {
background: none;
}
.edit-site-document-actions__title:hover {
color: var(--wp-admin-theme-color);
}
.components-dropdown {
align-items: center;
display: inline-flex;
}
.edit-site-document-actions__get-info {
min-width: 24px;
padding: 0;
&:hover {
background: none;
color: var(--wp-admin-theme-color);
}
}
.mailpoet-automation-editor-chip-gray {
padding: 0 4px;
}
}
.mailpoet-automation-editor-edit-site-document-actions__info-dropdown {
.components-popover__content {
min-width: 240px;
padding: 0;
}
}
.mailpoet-automation-editor-dropdown-name-edit {
padding: 16px;
}
@ -9,6 +46,15 @@
.mailpoet-automation-editor-dropdown-toggle-link {
display: inline-flex;
height: fit-content;
margin-top: 10px;
padding: 6px 0;
text-decoration: none;
&:hover {
background: none !important;
}
.edit-site-document-actions__title {
margin: 0 0.5em;
padding: 0;
}
}

View File

@ -1,3 +1,9 @@
#mailpoet_automation_editor .interface-interface-skeleton__header {
border-bottom: none;
}
// In automation editor we don't display the WP toolbar, but there is a css that adds space to the top of the page
// for the toolbar so we need to override it
.interface-interface-skeleton__html-container.wp-toolbar {
padding-top: 0;
}

View File

@ -63,13 +63,15 @@ $separator-width: 1px;
// add curve leaf ending rounded to the bottom
&:after {
$offset: 0.5px; // vertical offset to prevent artifacts with scale/zoom
border-left: $separator-width solid #c3c4c7;
border-top: $separator-width solid #c3c4c7;
border-top-left-radius: 35px 20px;
content: '';
display: block;
height: 16px;
margin: -$separator-width auto 0 calc(50% - $separator-width / 2);
height: 16px + $offset;
margin: calc(-1 * ($separator-width + $offset)) auto 0
calc(50% - $separator-width / 2);
transform-origin: left;
width: calc($width + $separator-width / 2);
}

View File

@ -81,6 +81,13 @@
box-sizing: content-box;
display: flex;
justify-content: center;
padding: 12px;
padding: 8px;
position: relative;
> div {
display: flex;
height: 100%;
justify-content: center;
width: 100%;
}
}

View File

@ -1,3 +1,5 @@
@import '../mailpoet-listing';
#mailpoet_automation * {
box-sizing: border-box;
@ -12,15 +14,6 @@
}
}
.mailpoet-automation-listing.woocommerce-table {
box-shadow: none;
margin-bottom: 0;
.woocommerce-pagination {
margin-bottom: 0;
}
}
.mailpoet-automation-listing-cell-name.woocommerce-table__item {
width: 100%;
@ -28,53 +21,3 @@
display: inline-flex;
}
}
.mailpoet-filter-tab-panel {
background-color: #fff;
border: 1px solid #dcdcde;
border-radius: 2px;
margin-top: 16px;
.components-tab-panel__tabs {
box-shadow: inset 0 -1px 0 0 #dcdcde;
}
.components-tab-panel__tabs-item:focus {
box-shadow: none;
}
.components-tab-panel__tabs-item.is-active {
box-shadow: inset 0 -4px 0 0 var(--wp-admin-theme-color);
}
.components-tab-panel__tabs-item:focus-visible {
box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus)
var(--wp-admin-theme-color);
}
.components-tab-panel__tabs-item.is-active:focus-visible {
box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus)
var(--wp-admin-theme-color),
inset 0 -4px 0 0 var(--wp-admin-theme-color);
}
.count {
background-color: #f0f0f1;
border-radius: 12px;
font-size: 11px;
font-weight: 400;
margin-left: 6px;
padding: 2px 5px;
}
}
.mailpoet-automation-listing-more-button button.components-button {
height: 36px;
padding: 0;
width: 36px;
svg {
height: 28px;
width: 28px;
}
}

View File

@ -1,7 +0,0 @@
.mailpoet-automation-listing-cell-actions {
align-items: center;
display: grid;
gap: 8px;
grid-auto-flow: column;
white-space: nowrap;
}

View File

@ -0,0 +1,28 @@
@import 'colors';
.mailpoet-automation-status {
background: $color-gutenberg-grey-100;
border-radius: 2px;
color: $color-gutenberg-grey-800;
font-size: 11px;
font-weight: 400;
line-height: 16px;
margin-right: 4px;
padding: 4px 8px;
white-space: nowrap;
}
.mailpoet-automation-status-success {
background: $color-wp-green-0;
color: $color-wp-green-60;
}
.mailpoet-automation-status-warning {
background: $color-wp-yellow-0;
color: $color-wp-yellow-60;
}
.mailpoet-automation-status-error {
background: $color-wp-red-0;
color: $color-wp-red-60;
}

View File

@ -3,6 +3,8 @@ $color-wp-gray-0: #fbfbfb;
$color-poet-gray-dividers: #dcdcde;
$color-gutenberg-blue: #007cba;
$color-gutenberg-grey-100: #f0f0f0;
$color-gutenberg-grey-200: #e0e0e0;
$color-gutenberg-grey-400: #ccc;
$color-gutenberg-grey-600: #949494;
$color-gutenberg-grey-700: #757575;
$color-gutenberg-grey-800: #2f2f2f;

View File

@ -30,8 +30,6 @@
.tox {
/* Small style changes to better fit TinyMCE to our editor */
&.tox-tinymce-inline {
border: 1px solid $color-editor-border-content;
border-radius: 3px;
box-shadow: 0 0 3px 1px rgba(0, 0, 0, 0.05);
/* Fix for fixed TinyMCE toolbar to be above WP menu */
@ -52,6 +50,11 @@
}
}
/* Override white button color when not selected or manipulated to let them match the background */
.tox-tbtn:not(.tox-tbtn--enabled):not(:hover):not(:active) {
background: transparent;
}
/* Slightly smaller TinyMCE button */
.tox-tbtn:not(.tox-tbtn--select) {
height: 28px;

View File

@ -23,8 +23,7 @@
height: 100%;
left: 0;
margin: 0 !important;
overflow-x: hidden;
overflow-y: auto;
overflow: hidden auto;
position: fixed;
top: 0;
width: 100%;

View File

@ -155,3 +155,8 @@
.mailpoet_popup .mailpoet_browser_preview_toggle {
top: -30px;
}
.mailpoet_newsletter_styles label {
display: block;
margin-bottom: $grid-gap-half;
}

View File

@ -40,8 +40,7 @@
.mailpoet_post_scroll_container {
max-height: 400px;
overflow-x: hidden;
overflow-y: scroll;
overflow: hidden scroll;
}
.mailpoet_settings_posts_single_post {

View File

@ -40,8 +40,7 @@
.mailpoet_product_scroll_container {
max-height: 400px;
overflow-x: hidden;
overflow-y: scroll;
overflow: hidden scroll;
}
.mailpoet_settings_products_single_product {

View File

@ -47,7 +47,7 @@
background: $color-white;
border: 1px solid $color-editor-border-content;
margin-bottom: 9px;
padding: 28px 9px (18px - 10px) 9px;
padding: 28px 9px (18px - 10px);
position: relative;
}

View File

@ -12,12 +12,6 @@
}
}
// Fix for settings toolbar placement in header
.edit-post-header {
flex-direction: row-reverse;
justify-content: space-between;
}
// Fix for default appender appearance
// We don't use any default block (WP Post editor has paragraph)
// and CSS distributed within packages is works only with the paragraph block
@ -132,7 +126,8 @@ h2 {
.edit-post-visual-editor {
background-color: $color-white;
padding: 10px 10px 100px;
height: 100%; // This is needed to catch all clicks to deselect a block
padding: 50px 10px 100px;
}
// Unify padding o wp-block-columns with background with front end rendering
@ -140,22 +135,19 @@ h2 {
padding: 10px;
}
// Close button animation
.edit-post-header-toolbar.edit-post-header-toolbar__left
> .edit-post-header-toolbar__inserter-toggle {
svg {
transition: transform cubic-bezier(0.165, 0.84, 0.44, 1) 0.2s;
}
&.is-pressed svg {
transform: rotate(45deg);
}
}
// Hide block selector header with close button on desktops
@include respond-to(not-small-screen) {
.edit-post-editor__inserter-panel-header {
.editor-inserter-sidebar__header {
display: none;
}
}
// We don't have any patterns so we don't want to display tabs in the inserter panel
.block-editor-inserter__tablist-and-close-button {
display: none !important;
}
// Scrollable inserter sidebar panel
.block-editor-inserter__tabs .block-editor-inserter__block-list {
overflow-y: auto;
}

View File

@ -1,15 +1,8 @@
.form-placement-option-list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-around;
margin: 0 -8px;
}
.form-placement-option {
height: $form-placement-option-height;
display: grid;
grid-gap: $grid-gap;
grid-template-columns: 1fr 1fr;
text-align: center;
width: $form-placement-option-width;
}
.form-placement-settings {

View File

@ -1,9 +1,33 @@
// Fix for settings toolbar placement in header
.edit-post-header {
flex-direction: row-reverse;
justify-content: space-between;
}
// Header buttons spacing
.mailpoet-editor-header-button {
padding-left: 8px;
padding-right: 8px;
@media (min-width: 600px) {
margin-right: 12px;
padding: 0 12px;
}
}
// Close button animation
.editor-document-tools__left > .edit-post-header-toolbar__inserter-toggle {
svg {
transition: transform cubic-bezier(0.165, 0.84, 0.44, 1) 0.2s;
}
&.edit-post-header-toolbar__inserter-toggle.is-pressed svg {
transform: rotate(45deg);
}
}
// Hide preview button on mobile
@include respond-to(small-screen) {
.mailpoet-preview-button {
display: none;
}
}

View File

@ -7,7 +7,6 @@
display: flex;
flex-direction: column;
justify-content: space-between;
margin-bottom: 16px;
padding: 6px;
pointer-events: auto;
position: relative;

Some files were not shown because too many files have changed in this diff Show More