Add temporary fix to ensure old duplicated newsletters have hashes

[MAILPOET-3275]
This commit is contained in:
Rostislav Wolny
2020-11-19 09:51:31 +01:00
committed by Veljko V
parent e22c192078
commit eb13116d2a

View File

@ -25,6 +25,7 @@ use MailPoet\Newsletter\Url as NewsletterUrl;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\UnexpectedValueException; use MailPoet\UnexpectedValueException;
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature; use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
use MailPoet\Util\Security;
use MailPoet\WP\Emoji; use MailPoet\WP\Emoji;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
@ -320,6 +321,7 @@ class Newsletters extends APIEndpoint {
$filters = $this->newsletterListingRepository->getFilters($definition); $filters = $this->newsletterListingRepository->getFilters($definition);
$groups = $this->newsletterListingRepository->getGroups($definition); $groups = $this->newsletterListingRepository->getGroups($definition);
$this->fixMissingHash($items); // Fix for MAILPOET-3275. Remove after May 2021
$data = []; $data = [];
foreach ($this->newslettersResponseBuilder->buildForListing($items) as $newsletterData) { foreach ($this->newslettersResponseBuilder->buildForListing($items) as $newsletterData) {
$data[] = $this->wp->applyFilters('mailpoet_api_newsletters_listing_item', $newsletterData); $data[] = $this->wp->applyFilters('mailpoet_api_newsletters_listing_item', $newsletterData);
@ -372,6 +374,7 @@ class Newsletters extends APIEndpoint {
} }
private function getViewInBrowserUrl(NewsletterEntity $newsletter): string { private function getViewInBrowserUrl(NewsletterEntity $newsletter): string {
$this->fixMissingHash([$newsletter]); // Fix for MAILPOET-3275. Remove after May 2021
$url = NewsletterUrl::getViewInBrowserUrl( $url = NewsletterUrl::getViewInBrowserUrl(
(object)[ (object)[
'id' => $newsletter->getId(), 'id' => $newsletter->getId(),
@ -382,4 +385,19 @@ class Newsletters extends APIEndpoint {
// strip protocol to avoid mix content error // strip protocol to avoid mix content error
return preg_replace('/^https?:/i', '', $url); return preg_replace('/^https?:/i', '', $url);
} }
/**
* Some Newsletters were created without a hash due to a bug MAILPOET-3275
* We can remove this fix after May 2021 since by then most users should have their data fixed
* @param NewsletterEntity[] $newsletters
*/
private function fixMissingHash(array $newsletters) {
foreach ($newsletters as $newsletter) {
if (!$newsletter instanceof NewsletterEntity || $newsletter->getHash() !== null) {
continue;
}
$newsletter->setHash(Security::generateHash());
$this->newslettersRepository->flush();
}
}
} }