{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":46273577,"defaultBranch":"master","name":"dotmailer-magento2-extension","ownerLogin":"dotmailer","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-11-16T12:35:34.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/3176979?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1727178175.0","currentOid":""},"activityList":{"items":[{"before":"df89a253409009305b9374069ebd1b61ed5d0d11","after":"cd9415ab4a76934797fcb0d9e4495e3644f11133","ref":"refs/heads/develop","pushedAt":"2024-09-26T11:20:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58285: Fix ExporterInterface reference in subscriber sync\n\n## What's being changed\n\nWe have updated the interface type for subscriber sync in the `exportAndBatch()` function.\n\n## Why it's being changed\n\nThe sync was referencing the incorrect interface, causing the sync to not function properly.\n\n## How to review / test this change\n\n- Reset subscriber sync\n- Run subscriber sync from CLI\n- Run subscriber sync from UI\n- Check if the sync records are valid\n\nRelated work items: #271701","shortMessageHtmlLink":"Merged PR 58285: Fix ExporterInterface reference in subscriber sync"}},{"before":"0358d7806c2bcf56e82ff900846685048af5ac81","after":"df89a253409009305b9374069ebd1b61ed5d0d11","ref":"refs/heads/develop","pushedAt":"2024-09-26T09:03:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58245: Use MegaBatchProcessorFactory for each batch in syncs\n\n## What's being changed\n\nCustomer, Subscriber, Guest and Order syncs now instantiate a new MegaBatchProcessor for each individual batch being processed.\n\n## Why it's being changed\n\nWe introduced a watered-down version of this behaviour in the updated order sync, with a new batch processor per website loop. This PR takes things a step further, by creating a fresh instance of the MegaBatchProcessor for every batch. The goal here is to minimise memory usage, and prevent large amounts of data being retained in memory across long-running syncs.\n\n## How to review / test this change\n\n- Reset all data\n- Allow cron to process the syncs\n- Observe the batched data\n\nRelated work items: #270477","shortMessageHtmlLink":"Merged PR 58245: Use MegaBatchProcessorFactory for each batch in syncs"}},{"before":"003d2a2e209fe508a472b940be14ce9538571085","after":"0358d7806c2bcf56e82ff900846685048af5ac81","ref":"refs/heads/develop","pushedAt":"2024-09-25T16:41:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58051: Align V3 imports to BULK_JSON mode\n\n## What's being changed\n\nVarious parts of the new 'quick queue' syncs and the importer process. Customer, Subscriber, Guest and Consent sync are all V3 syncs so they use the new BULK_JSON import mode. The `$useFile` marker has been removed as an identifier for old-style contact syncs.\n\n## Why it's being changed\n\nNow that the order sync is refactored, we have some pieces to adjust in the other bulk syncs.\n\n## How to review / test this change\n\n- Switch back to master, reset your contacts and consent data and run Customer, Subscriber, Guest and Consent syncs\n- You should have all four types queued in the importer\n- Now switch back to this branch and repeat the process\n- Confirm that all the new imports use BULK_JSON\n- Run the importer sync\n- Confirm that the old 'Bulk' rows are processed and move from 0 to 1 (import_status)\n- Confirm that the new rows move from 1 to 2\n- Run the importer sync\n- Confirm that the old 'Bulk' rows move from 1 to 2\n- Reset a new V3 import row via the UI\n- Run the importer sync\n- Confirm that the new row moves from 0 to 1\n\nRelated work items: #236430","shortMessageHtmlLink":"Merged PR 58051: Align V3 imports to BULK_JSON mode"}},{"before":"389f9eb4cc2e9e66e0a6457e4fd94b2306868c55","after":"003d2a2e209fe508a472b940be14ce9538571085","ref":"refs/heads/develop","pushedAt":"2024-09-25T13:43:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 57124: Pre-sync subscribers via API V3\n\n## What's being changed\n\nSingleSubscriberSyncer and the DataFieldCollector. Subscribers being synced individually will now be sent via API V3, with specific exceptions logged with full details.\n\n## Why it's being changed\n\nNow that the SubscriberExporter and SubscriberWithSalesExporter return an array of SdkContacts, with channel properties already set, we can check the OptInType property on the hydrated model, without needing to look it up again prior to the Dotdigital request.\n\n## How to review / test this change\n\n- Switch off cron\n- Test adding a new subscriber\n- Start the `ddg.newsletter.subscription` queue consumer\n- Check all expected data fields are present in Dotdigital\n- Confirm that if Need to Confirm is set to Yes, optInType is captured as a channel property and sent with the request\n- Repeat with a new subscriber automation (starting the `ddg.sync.automation` consumer)\n\nRelated work items: #266108","shortMessageHtmlLink":"Merged PR 57124: Pre-sync subscribers via API V3"}},{"before":"8d4cc14183376bcc343ebf1843a18ff9861a6a4d","after":"3463e5959703c86b69b883ad756983cac22eb9ea","ref":"refs/heads/master","pushedAt":"2024-09-24T09:27:12.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magento2-extension","shortMessageHtmlLink":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magen…"}},{"before":"1a5dbf7e379fd789c8a401e76f2278709667ff86","after":"389f9eb4cc2e9e66e0a6457e4fd94b2306868c55","ref":"refs/heads/develop","pushedAt":"2024-09-23T15:58:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58205: 4.26.3 pre-release\n\n4.26.3 pre-release\n\nRelated work items: #271383","shortMessageHtmlLink":"Merged PR 58205: 4.26.3 pre-release"}},{"before":"10ea75ad46a64be34db15236d3d1490e114a97a3","after":"1a5dbf7e379fd789c8a401e76f2278709667ff86","ref":"refs/heads/develop","pushedAt":"2024-09-23T15:38:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58137: Get only the first IP for consent if request is forwarded\n\n## What's being changed\n\nWhen we get the user's IP address for storing against their consent record, we are now fetching only the first listed IP address.\n\n## Why it's being changed\n\nAPI v3 now returns an error like:\n```\n\"String ', 127.0.0.1' does not validate against format 'ipv4'. Path: 'consentRecords[0].ipAddress'.\"\n```\n\nIPs can be formed like this if the request is forwarded by a load balancer or proxy server.\n\n## How to review / test this change\n\n- Lorem\n- ipsum\n\n## Notes\n\nWe manipulate the IP address elsewhere already - see `Model\\Integration\\IntegrationSetup::getEcSignupUrl()`. I didn't DRY this up for the time being, opting for a quick fix.\n\nRelated work items: #271210","shortMessageHtmlLink":"Merged PR 58137: Get only the first IP for consent if request is forw…"}},{"before":"0c76e89fb3bdd3bcc2dd053c316cbb8fee48fcaa","after":"10ea75ad46a64be34db15236d3d1490e114a97a3","ref":"refs/heads/develop","pushedAt":"2024-09-23T11:05:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58003: Use constants for queue topic names\n\n## What's being changed\n\nThis PR introduces class constants for all topic names. I've placed the constants in the same class as the `publish()` call (if they are only used in that one place) or else in a related model class.\n\n## Why it's being changed\n\nThis is designed to protect us against error when updating queue topic names in future.\n\n## How to review / test this change\n\n- Test all the topic names, see each one output into the queue table (for subscription, pick one trigger that will publish a queue message)\n- Confirm that we only use constants when calling `PublisherInterface::publish()`\n\nRelated work items: #265572","shortMessageHtmlLink":"Merged PR 58003: Use constants for queue topic names"}},{"before":"5b45e3b060ead1bf244a713ad3437ed71bfa7b0e","after":"0c76e89fb3bdd3bcc2dd053c316cbb8fee48fcaa","ref":"refs/heads/develop","pushedAt":"2024-09-23T09:13:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 58181: Fix variable variable ref for cart URL\n\n## What's being changed\n\nIn `GetBasket.php`, a typo is being fixed in the `setPath` method call.\n\n## Why it's being changed\n\nTypo in `GetBasket.php` that could cause issues with setting the correct path.\n\n## How to review / test this change\n\n1. Smoke test abandoned cart `getBasket` feature using PWA URLs.\n\nRelated work items: #268812","shortMessageHtmlLink":"Merged PR 58181: Fix variable variable ref for cart URL"}},{"before":"028811ae2419018b701a6f967c5fa5610f4410ce","after":"5b45e3b060ead1bf244a713ad3437ed71bfa7b0e","ref":"refs/heads/develop","pushedAt":"2024-09-19T11:52:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 57983: Fix cannot clear preferences or data fields in customer account\n\n## What's being changed\n\nThe Newsletter controller that is hit when customers save their newsletter subscription, preferences, data fields or list memberships from within their customer account.\n\n## Why it's being changed\n\nWe had some bits of conditional logic in place here dating back 6 years, that prevented the _clearing_ or resetting of preferences and data fields. So it was impossible to unset all preference checkboxes and opt out of everything. In addition any data field values that were cleared would not result in those values being cleared upstream in Dotdigital, and cleared date-type values would actually cause today's date to be set as a replacement.\n\n## How to review / test this change\n\n- Configure your options to display customer preferences and data fields\n- Log in as a customer and check some preferences, save\n- Try to uncheck all preferences, save > your options should all be unchecked in Dotdigital\n- For a thorough test of data fields, you want to be displaying in the account one of each type (Numeric, String, Date and Boolean)\n- Opt out or uncheck or clear all of these data field values, confirming that these are reflected on DD\n- Make sure in particular that cleared dates are subsequently null in DD\n\nRelated work items: #269315","shortMessageHtmlLink":"Merged PR 57983: Fix cannot clear preferences or data fields in custo…"}},{"before":"2c3c57022c4f3113f4a6217868a97fab93ef494b","after":"028811ae2419018b701a6f967c5fa5610f4410ce","ref":"refs/heads/develop","pushedAt":"2024-09-18T14:22:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 57979: Fix upstream preferences not displaying in customer account\n\n## What's being changed\n\nPreferences, lists and data field visibility in the customer account.\n\n## Why it's being changed\n\nPre-existing preferences, list membership and data field values were not displaying in the customer account at first, if the customer did not yet have a Dotdigital contact id in the table.\n\nThis was a regression from [this commit](https://dev.azure.com/dotdigital/ec/_git/ec-core-magento2-extension/commit/d96121a2b26d54d8ec0c524696dbe42880e47ef4) in v4.22.0.\n\n## How to review / test this change\n\n- Create a contact in Dotdigital\n- Assign list membership\n- Assign some data fields\n- Assign marketing preferences\n- In Magento, configure your options to display these lists, DFs and prefs in the customer account\n- Create a customer account in Magento using the same email\n- In the 'Newsletter Subscriptions' page, you should see existing preferences, lists and data fields\n- Test with another contact that already has a contact id\n- Test changing and updating values\n- Log in with a contact, then in the background delete their contact id (does anything break)\n- Log in with a contact, then in the background delete their row in email_contact (you should see the account's preferences listed, but nothing checked)\n\nRelated work items: #270677","shortMessageHtmlLink":"Merged PR 57979: Fix upstream preferences not displaying in customer …"}},{"before":"48262aa2b18c84adb9d21887b4bc6711976b3b13","after":"2c3c57022c4f3113f4a6217868a97fab93ef494b","ref":"refs/heads/develop","pushedAt":"2024-09-17T09:52:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56335: Update Order Sync to send data via API v3\n\n## What's being changed\n\nWe've updated our batch processing and exporting system for enhanced flexibility and modularity. New interfaces and classes have been introduced, existing exporter classes have been aligned with new definitions, and the handling of transactional data imports has been improved.\n\n## Why it's being changed\n\nThe reason for these changes is to improve the performance and efficiency of the batch processing and exporting system. By introducing new interfaces and refactoring existing classes, we aim to support new data processing strategies and enhance the order synchronization process.\n\nThese changes also ensure better logging and error handling during the sync process, which is crucial for maintaining data integrity and debugging issues. Additionally, the new structures provide a more modular and flexible architecture, allowing for easier maintenance and future enhancements.\n\n## How to review/test this change\n\n### Test Sync\n\nEnsure you are using the branch on https://dev.azure.com/dotdigital/ec/_git/dd-php/pullrequest/57314 for the SDK models required for the importer sync progress checks.\n\n1. Verify the new interfaces and their implementations.\n2. Check the integration of `SdkOrderRecordCollectionBuilder` in the export process.\n3. Smoke test `GuestExporter`, `SubscriberExporter`, and `Dotdigitalgroup\\Email\\Model\\Sync\\Customer\\Exporter`.\n4. Test the `ImporterQueueManager` with `TransactionalBulkJsonFactory`.\n5. Validate the refactored `Order` class for correct order synchronization.\n6. Confirm the `Exporter` class functionality with `SdkOrderRecordCollectionBuilderFactory`.\n7. Test the `BulkJson` class for `TransactionalData` processing.\n8. Test using multiple stores and ensure the loop by website works as expected, including orders disabled for one website even after it has orders in the `email_order` table.\n9. Run importer sync. Ensure the BULK_JSON type gets handled correctly by the Progress report handler.\n10. Observe a status indicator of 2 within the database record for your test sync.\n\n### Test UI\n\n1. Navigate to the import reports page.\n2. Ensure the BULK_JSON records are visible as BULK.\n3. Test the BULK filter option; ensure it includes the BULK_JSON records displayed as BULK.\n\n**Notes**\n- Review the logging outputs for any potential issues during the sync process.\n- Pay special attention to the new `SdkOrderRecordCollectionBuilder` class and its integration, as it plays a crucial role in the export process.\n- Verify that the refactored `Order` class correctly handles order synchronization with the new factories and interfaces.\n\nRelated work items: #238504","shortMessageHtmlLink":"Merged PR 56335: Update Order Sync to send data via API v3"}},{"before":"a3ad1507f19346e318942d9bb1d1e06ecae0a6db","after":"48262aa2b18c84adb9d21887b4bc6711976b3b13","ref":"refs/heads/develop","pushedAt":"2024-08-15T10:23:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56874: Do not sync Email, EmailType or OptInType as data fields\n\n## What's being changed\n\nThis PR fixes handling of some data points previously treated as data fields in the context of CSV sync.\n\nAll contact exports now do not export Email or EmailType. Subscriber exports now set OptInType per subscriber depending on Customers > Newsletter > Subscription Options > Need to Confirm at _store level_ (this is a change - we used to check this at website level but the config is store-scoped).\n\n## Why it's being changed\n\nEmail, EmailType and OptInType are not data fields - in V3, EmailType and OptInType are channel properties, and in fact even in V2, these data points are sent separately from data fields in API requests. It's only because of how we used to send these via CSV that they were handled the way they were.\n\n## How to review / test this change\n\n- Run customer sync, guest sync and subscriber sync\n- All exported JSON should have `,\"channelProperties\":{\"email\":{\"emailType\":\"html\"}}` for each contact\n- Subscriber exports should _not_ contain `optInType` yet\n- Turn on Customers > Newsletter > Subscription Options > Need to Confirm in a store scope\n- Re-sync subscribers\n- Subscribers in the affected store scope should be synced with `\"channelProperties\":{\"email\":{\"emailType\":\"html\",\"optInType\":\"double\"}}`\n- Email, EmailType and OptInType should not be seen in data fields at all\n\nRelated work items: #264085, #265397, #265398","shortMessageHtmlLink":"Merged PR 56874: Do not sync Email, EmailType or OptInType as data fi…"}},{"before":"e476e04d96d1fd9cd10b7373a9e24e96ba73a03b","after":"a3ad1507f19346e318942d9bb1d1e06ecae0a6db","ref":"refs/heads/develop","pushedAt":"2024-08-15T09:21:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 57079: Add default configs where values are passed to DateInterval\n\n## What's being changed\n\nWe've added default values in config.xml relating to send_after settings for abandoned carts.\n\n## Why it's being changed\n\nThese should have been added anyway, but this PR resolves a particular error: `Unknown or bad format (PTM)` in abandoned cart sync. The error appeared in the cron report if AC was configured at website or store level, but the 'Enrol abandoned cart after' setting was set to 'Use default' (and default was null).\n\n## How to review / test this change\n\n- Reset all configs in abandoned_carts (delete from core_config_data and flush config cache)\n- Map AC program at website level leaving 'Enrol abandoned cart after' ('Use Default' will be checked)\n- Run abandoned cart sync\n- See no error in CLI\n- Configure AC email series as well, in the same way (not at default level, leaving 'send after' settings as 'Use Default')\n- Drop a cart and allow cron to run and pick up your cart for both program and email series\n\nRelated work items: #267092","shortMessageHtmlLink":"Merged PR 57079: Add default configs where values are passed to DateI…"}},{"before":"d3e31472e9e89c7d04e7c7edc8c026775d06e12e","after":"8d4cc14183376bcc343ebf1843a18ff9861a6a4d","ref":"refs/heads/master","pushedAt":"2024-07-29T15:20:42.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magento2-extension","shortMessageHtmlLink":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magen…"}},{"before":"d5147c408b4f213dd0488c1fff7b1e14246b77b2","after":"e476e04d96d1fd9cd10b7373a9e24e96ba73a03b","ref":"refs/heads/develop","pushedAt":"2024-07-29T14:10:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56609: 4.26.2 pre-release\n\n4.26.2 pre-release\n\nRelated work items: #264092","shortMessageHtmlLink":"Merged PR 56609: 4.26.2 pre-release"}},{"before":"41bd2baa9392bd6007d8968c2e0e8eeb4a06f3c7","after":"d5147c408b4f213dd0488c1fff7b1e14246b77b2","ref":"refs/heads/develop","pushedAt":"2024-07-29T13:33:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56612: Add missing setType call to OrderSaveAfter\n\n## What's being changed\n\nOrderSaveAfter.\n\n## Why it's being changed\n\nWe fixed the incorrect queue topic name already, but in fact we also needed to `setType`, otherwise the SubscriptionData class will throw a type error on `getType`.\n\n## How to review / test this change\n\n- Subscribe an email address\n- Check out as a guest with this same email address\n- See the order complete\n- Go into orders admin, cancel the order\n- See the order cancelled\n\nRelated work items: #264582","shortMessageHtmlLink":"Merged PR 56612: Add missing setType call to OrderSaveAfter"}},{"before":"d534b3102c10cb0cfbe305d231afc497e5d850a8","after":"d3e31472e9e89c7d04e7c7edc8c026775d06e12e","ref":"refs/heads/master","pushedAt":"2024-07-29T11:49:55.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magento2-extension","shortMessageHtmlLink":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magen…"}},{"before":"6c488d79cb46c6cc1819f4c3a4e4e9662fbcfb71","after":"41bd2baa9392bd6007d8968c2e0e8eeb4a06f3c7","ref":"refs/heads/develop","pushedAt":"2024-07-25T08:40:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56475: Fix incorrect publisher topic for subscriptions on contact reset\n\n## What's being changed\n\nWe have corrected a publisher topic for contact subscriptions.\n\n## Why it's being changed\n\nWhen the cron for order clean-up runs, the `resetContact` was publishing a subscription message to an invalid queue.\n\n## How to review / test this change\n\n- Ensure you have DB consumers configured.\n- Trigger the `sales_order_save_after` event.\n- Observe no error in the message queue report.\n\nRelated work items: #263931","shortMessageHtmlLink":"Merged PR 56475: Fix incorrect publisher topic for subscriptions on c…"}},{"before":"bf40ab2d08f80603ad5e39656977c83ee69f9c3f","after":"6c488d79cb46c6cc1819f4c3a4e4e9662fbcfb71","ref":"refs/heads/develop","pushedAt":"2024-07-24T07:46:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56490: Update escape method to ensure microsite iframe displays correctly\n\n## What's being changed\n\n`escapeHtml` is replaced with `escapeJs` in trial.phtml.\n\n## Why it's being changed\n\nThis fixes a regression in 4.25.2. `escapeHtml` encodes the ampersands in the iframe URL, meaning the URL doesn't work and the microsite doesn't actually load.\n\n## How to review / test this change\n\n- Clear all API creds from core_config_data\n- Clear cache\n- Go to Dotdigital > Accounts\n- Click on the 'Start Trial' banner\n- Ensure the microsite loads correctly\n\nRelated work items: #264055","shortMessageHtmlLink":"Merged PR 56490: Update escape method to ensure microsite iframe disp…"}},{"before":"aba9d0330939603abf80add14f572c5d9ccde78e","after":"bf40ab2d08f80603ad5e39656977c83ee69f9c3f","ref":"refs/heads/develop","pushedAt":"2024-07-22T15:37:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55784: System messages to surface message queue problems\n\n## What's being changed\n\nThis PR adds a new type of monitor to check problems with Dotdigital message queue consumers. The monitor runs alongside our other monitors (for cron, automations etc.) and will flag:\n- any ddg messages marked with the status 'error'\n- any ddg messages still with the status 'new' 1 hour after creation\n\nAny problems are surfaced in a system message in the usual way, and/or emailed as a notification.\n\nWe also updated the dashboard to indicate when the last run of the consumers_runner cron was.\n\n## Why it's being changed\n\nWith our transition to queues for faster sync times between Magento and Dotdigital, ensuring queue messages are consumed as expected and on time is now critical. We've noticed that the proper running of `consumers_runner` cron is not a given on merchant systems, and also that occasionally merchants have restricted running consumers to a subset (presumably to save on resource utilization), meaning that our queue consumers aren't running by default.\n\n## How to review / test this change\n\n- Turn on system messages and email alerts\n- Turn off cron\n- Queue some messages of different types, which will stay in pending\n- Wait an hour or manually amend the `updated_at` value of your new queue messages\n- Run the monitor task (bin/magento dotdigital:task Monitor)\n- See a system message for Message Queue with the appropriate jobs highlighted\n- Manually set some other messages to have status 6 (error)\n- Re-run the monitor cron, see the system message updated to include errors\n- Confirm that 'new' messages added in the last hour are not flagged\n- Confirm that only ddg messages are flagged\n- Confirm that email notifications work as expected (check the formatting and text of the email)\n- Turn on cron, process your outstanding messages or otherwise resolve your bad statuses\n- See no system message\n\n## Notes\nA reminder on how the notifications work.\n- You can tune what the interval is. By default we find any errors or stuck-pending messages in the last 24 hours.\n- The monitor cron runs every 15 mins, and updates the system message.\n- Once the email notification kicks out, we won't send another one for another 24 hours (or whatever the interval is).\n\nRelated work items: #258685","shortMessageHtmlLink":"Merged PR 55784: System messages to surface message queue problems"}},{"before":"1eb7260200de2e3ff07a25493837fbd7de45f2cd","after":"aba9d0330939603abf80add14f572c5d9ccde78e","ref":"refs/heads/develop","pushedAt":"2024-07-22T09:04:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55159: Sync contacts via JSON instead of CSV\n\n## What's being changed\n\nCSV file-based sync for Customer, Guest and Subscriber sync is being replaced with JSON data. The 'export' phase of each sync will now return an array of hydrated SDK contact objects, ready for V3 API import.\n\nVarious optimisations for speed and efficiency have been included:\n- `import_data` is now LONGTEXT to allow storing of larger JSON blobs\n- mega batches that are too large for an API request will be completed and processed\n- any usage of abstract classes or other inheritance in these syncs is being refactored out, in line with general Magento design principles\n- the aim is to consolidate all merging and processing of mega batches in single classes (MergeManager and MegaBatchProcessor)\n\n## Why it's being changed\n\nV3 of our API accepts bulk JSON imports for contacts including data fields.\n\n## How to review / test this change\n\n- Test batching of customer, guest and subscriber syncs\n- Test batch processing including data transfer to Dotdigital and the marking of rows as imported\n- Test data field collection when pre-sending contacts in automation sync\n- Old-style imports of CSV queued at point of upgrade must still be processed and be able to be retried\n- Old-style CSV imports that are in progress must still be processed as previously\n- Test resetting imports and retrying\n- Cleaner cron must still remove any remaining archive folder\n\n_Test PayloadTooLargeException_\n- adjust down your contact mega batch size\n- set the MEGA_BATCH_SIZE_BYTE_LIMIT_API const to fx 4000\n- run the sync to test\n- mega batches should be built only so long as their prospective size remains under the limit\n\n## Notes\n\n- During these syncs, rows must be marked as imported even if the JSON import was rejected, otherwise the offset won't work correctly in the export\n\nRelated work items: #236430, #260229","shortMessageHtmlLink":"Merged PR 55159: Sync contacts via JSON instead of CSV"}},{"before":"decb38ec4b547fb7cfcd509606e391277940fd62","after":"d534b3102c10cb0cfbe305d231afc497e5d850a8","ref":"refs/heads/master","pushedAt":"2024-07-18T08:43:46.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magento2-extension","shortMessageHtmlLink":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magen…"}},{"before":"f3d2bbb4847a3893861f0a52ce517831d640426b","after":"1eb7260200de2e3ff07a25493837fbd7de45f2cd","ref":"refs/heads/develop","pushedAt":"2024-07-17T20:31:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 56265: 4.26.1 pre-release\n\n4.26.1 pre-release\n\nRelated work items: #262666","shortMessageHtmlLink":"Merged PR 56265: 4.26.1 pre-release"}},{"before":"f40bff7de857d2c6c2b820e76ed8a16168e944a0","after":"f3d2bbb4847a3893861f0a52ce517831d640426b","ref":"refs/heads/develop","pushedAt":"2024-07-17T08:32:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55961: Remove API credentials from campaign send request body\n\n## What's being changed\n\nThe client wrapper method for sending campaigns.\n\n## Why it's being changed\n\nFor some unknown reason this request includes the API username and password in the request body. It shouldn't, [check the docs](https://developer.dotdigital.com/reference/send-campaign).\n\n## How to review / test this change\n\n- Queue some email campaigns to send\n- Run campaign sync\n- Confirm the send request is made as expected, and a response received\n\nRelated work items: #262256","shortMessageHtmlLink":"Merged PR 55961: Remove API credentials from campaign send request body"}},{"before":"94b4c6847748637006103aa09b0c8807ff20aec4","after":"f40bff7de857d2c6c2b820e76ed8a16168e944a0","ref":"refs/heads/develop","pushedAt":"2024-07-15T08:27:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55936: Use formatPriceValue to round all price figures\n\n## What's being changed\n\nThe Product model for catalog sync.\n\n## Why it's being changed\n\nIf a tax rate had more than 2 decimal places, we were seeing `incl_tax` figures with more than 2 decimal places as well. Now we use the same utility method to format all price values in the same way.\n\n## How to review / test this change\n\n- Set up a tax zone with a rate like 20.4532\n- Apply this rate to your catalog with a tax rule and see this applied on the storefront\n- Run catalog sync\n- Ensure that price, specialPrice, price_incl_tax and specialPrice_incl_tax are rounded to 2 decimal places\n\nRelated work items: #258489","shortMessageHtmlLink":"Merged PR 55936: Use formatPriceValue to round all price figures"}},{"before":"0baf4d4d7f8dfe65486a12f2648bb42847989382","after":"decb38ec4b547fb7cfcd509606e391277940fd62","ref":"refs/heads/master","pushedAt":"2024-07-03T12:57:44.000Z","pushType":"push","commitsCount":16,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magento2-extension","shortMessageHtmlLink":"Merge branch 'master' of https://github.com/dotmailer/dotmailer-magen…"}},{"before":"094070882fa20b0b5c2fb2e278479a93739a9106","after":"94b4c6847748637006103aa09b0c8807ff20aec4","ref":"refs/heads/develop","pushedAt":"2024-07-03T11:25:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55901: Fix compilation in PHP 7.4\n\n## What's being changed\n\nConstructor arguments in an observer.\n\n## Why it's being changed\n\nThe trailing comma breaks compilation in PHP 7.4.\n\n## How to review / test this change\n\n- Run setup:di:compile in Magento 2.3.7 on PHP 7.4.\n\nRelated work items: #262008","shortMessageHtmlLink":"Merged PR 55901: Fix compilation in PHP 7.4"}},{"before":"f4efd1ea962f8f47ac86a0245e2a21d6cdd923d5","after":"094070882fa20b0b5c2fb2e278479a93739a9106","ref":"refs/heads/develop","pushedAt":"2024-07-03T10:33:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55853: 4.26.0 pre-release\n\n4.26.0 pre-release\n\nRelated work items: #261808","shortMessageHtmlLink":"Merged PR 55853: 4.26.0 pre-release"}},{"before":"71e145b3c72778d24ee156f65812278878cb7b9f","after":"f4efd1ea962f8f47ac86a0245e2a21d6cdd923d5","ref":"refs/heads/develop","pushedAt":"2024-07-01T15:26:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"simon-letch","name":null,"path":"/simon-letch","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4983213?s=80&v=4"},"commit":{"message":"Merged PR 55606: Sync all contact subscription state changes via a single queue\n\n## What's being changed\n\nSubscription state is now handled by a single consumer, consuming a single queue. The SUBSCRIBER_STATUS data field is no longer synced via customer sync. Bulk subscriber sync will take place at onboarding for initial data ingestion, thereafter queues will take over, and `subscriber_imported` will stay at 1 (imported) unless there is a subscribers reset or a fresh `data:migrate` happens.\n\nMessages in the `ddg.subscription.queue` can be 'subscribe', unsubscribe' or 'resubscribe' (for previously suppressed contacts).\n\n## Why it's being changed\n\nWe were seeing mismatching values for SUBSCRIBER_STATUS between Magento and Dotdigital - but the way we had implemented queues partially (with queues for unsubscribes and resubscribes, cron for subscriptions, SUBSCRIBER_STATUS going via customer sync) meant that there has been the possibility for discrepancies to emerge in list membership as well.\n\n## How to review / test this change\n\n- Turn off cron\n- Whilst on develop, queue some unsubscribes and resubscribes\n- Switch to this branch, turn on cron\n- Ensure the backlogged messages for ddg.newsletter.unsubscribe and ddg.newsletter.resubscribe are processed\n- Test subscribe\n- Test unsubscribe\n- Test resubscribe\n- Retest subscribe for a subscribed guest who has placed an order (turn on subscriber sales data)\n- Test that an automation for a new subscriber leads to the contact being created in DD with the correct data fields (you might want to turn off cron and run the Automation CLI to isolate this process)\n- Confirm that customer sync does not sync SUBSCRIBER_STATUS (it should not be a column in the CSV)\n\n## Notes\n\n- subscriber_imported should only be set to 0 in the case of a subscribers reset (never at any other time)\n- In a db queue implementation, the SubscriptionConsumer will consume messages sequentially\n- In an AMQP queue implementation, multiple consumers may be recruited to consume available messages in parallel, but it is expected that the queue is still consumed sequentially, albeit in a round-robin style. Some brokers can be configured to strictly process one message at a time (see [RabbitMQ docs](https://www.rabbitmq.com/docs/consumers#single-active-consumer)).\n\nRelated work items: #235800, #260620","shortMessageHtmlLink":"Merged PR 55606: Sync all contact subscription state changes via a si…"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNlQxMToyMDo0NS4wMDAwMDBazwAAAATBZNwy","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0wMVQxNToyNjo0OC4wMDAwMDBazwAAAARz6_cL"}},"title":"Activity · dotmailer/dotmailer-magento2-extension"}