46 lines
1.6 KiB
PHP
46 lines
1.6 KiB
PHP
<?php declare(strict_types = 1);
|
|
|
|
namespace MailPoet\Migrations\App;
|
|
|
|
if (!defined('ABSPATH')) exit;
|
|
|
|
|
|
use MailPoet\Entities\NewsletterLinkEntity;
|
|
use MailPoet\Entities\SendingQueueEntity;
|
|
use MailPoet\Migrator\AppMigration;
|
|
|
|
/**
|
|
* The plugin from the version 5.5.2 to 5.6.1 contained a bug when we stored links containing & and in some cases also links with `&amp;` in the database.
|
|
* This migration fixes the issue by replacing `&amp;` with `& and then & with &`.
|
|
*
|
|
* See https://mailpoet.atlassian.net/browse/MAILPOET-6433
|
|
*/
|
|
class Migration_20250120_094614_App extends AppMigration {
|
|
public function run(): void {
|
|
$sendingQueueId = $this->getSendingQueueId();
|
|
if ($sendingQueueId) {
|
|
$linksTable = $this->entityManager->getClassMetadata(NewsletterLinkEntity::class)->getTableName();
|
|
$this->entityManager->getConnection()->executeQuery("
|
|
UPDATE {$linksTable}
|
|
SET url = REPLACE( REPLACE(url, '&amp;', '&'), '&', '&')
|
|
WHERE queue_id >= :queue_id;
|
|
", ['queue_id' => $sendingQueueId]);
|
|
}
|
|
}
|
|
|
|
private function getSendingQueueId(): ?int {
|
|
$qb = $this->entityManager->createQueryBuilder();
|
|
/** @var array{id: number}|null $result */
|
|
$result = $qb->select('sq.id AS id')
|
|
->from(SendingQueueEntity::class, 'sq')
|
|
->where(
|
|
$qb->expr()->gt('sq.createdAt', ':date')
|
|
)
|
|
->orderBy('sq.id', 'ASC')
|
|
->setMaxResults(1)
|
|
->setParameter('date', '2024-12-24:00:00:00')
|
|
->getQuery()
|
|
->getOneOrNullResult();
|
|
return $result ? (int)$result['id'] : null;
|
|
}
|
|
}
|