. */ namespace SP\Domain\Account\Services; use Exception; use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\DataModel\PublickLinkOldData; use SP\DataModel\PublicLinkData; use SP\Domain\Account\PublicLinkServiceInterface; use SP\Domain\Account\UpgradePublicLinkServiceInterface; use SP\Domain\Common\Services\Service; use SP\Infrastructure\Database\DatabaseInterface; use SP\Infrastructure\Database\QueryData; use SP\Util\Util; /** * Class UpgradePublicLink * * @package SP\Domain\Upgrade\Services */ final class UpgradePublicLinkService extends Service implements UpgradePublicLinkServiceInterface { protected PublicLinkServiceInterface $publicLinkService; protected DatabaseInterface $database; public function __construct( Application $application, PublicLinkServiceInterface $publicLinkService, DatabaseInterface $database ) { parent::__construct($application); $this->publicLinkService = $publicLinkService; $this->database = $database; } /** * upgrade_300_18010101 */ public function upgrade_300_18010101(): void { $this->eventDispatcher->notifyEvent( 'upgrade.publicLink.start', new Event( $this, EventMessage::factory() ->addDescription(__u('Public links update')) ->addDescription(__FUNCTION__) ) ); try { $this->transactionAware( function () { $queryData = new QueryData(); $queryData->setQuery('SELECT id, `data` FROM PublicLink'); foreach ($this->database->doSelect($queryData)->getDataAsArray() as $item) { /** @var PublickLinkOldData $data */ $data = Util::unserialize( PublickLinkOldData::class, $item->data, PublicLinkData::class ); $itemData = new PublicLinkData(); $itemData->setId($item->id); $itemData->setItemId($data->getItemId()); $itemData->setHash($data->getLinkHash()); $itemData->setUserId($data->getUserId()); $itemData->setTypeId($data->getTypeId()); $itemData->setNotify($data->isNotify()); $itemData->setDateAdd($data->getDateAdd()); $itemData->setDateExpire($data->getDateExpire()); $itemData->setCountViews($data->getCountViews()); $itemData->setMaxCountViews($data->getCountViews()); $itemData->setUseInfo($data->getUseInfo()); $itemData->setData($data->getData()); $this->publicLinkService->update($itemData); $this->eventDispatcher->notifyEvent( 'upgrade.publicLink.process', new Event( $this, EventMessage::factory() ->addDescription(__u('Link updated')) ->addDetail(__u('Link'), $item->id) ) ); } }, $this->database ); } catch (Exception $e) { processException($e); $this->eventDispatcher->notifyEvent('exception', new Event($e)); } $this->eventDispatcher->notifyEvent( 'upgrade.publicLink.end', new Event( $this, EventMessage::factory() ->addDescription(__u('Public links update')) ->addDescription(__FUNCTION__) ) ); } }