. */ namespace SP\Services\Upgrade; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\DataModel\PublickLinkOldData; use SP\DataModel\PublicLinkData; use SP\Services\PublicLink\PublicLinkService; use SP\Services\Service; use SP\Services\ServiceException; use SP\Storage\Database; use SP\Storage\DbWrapper; use SP\Storage\QueryData; use SP\Util\Util; /** * Class UpgradePublicLink * * @package SP\Services\Upgrade */ class UpgradePublicLink extends Service { /** * @var Database */ private $db; /** * upgrade_300_18010101 * * @throws \SP\Core\Exceptions\SPException */ public function upgrade_300_18010101() { $this->eventDispatcher->notifyEvent('upgrade.publicLink.start', new Event($this, EventMessage::factory() ->addDescription(__u('Actualización de enlaces públicos')) ->addDescription(__FUNCTION__)) ); $queryData = new QueryData(); $queryData->setQuery('SELECT id, `data` FROM PublicLink'); try { $publicLinkService = $this->dic->get(PublicLinkService::class); if (!DbWrapper::beginTransaction($this->db)) { throw new ServiceException(__u('No es posible iniciar una transacción')); } foreach (DbWrapper::getResultsArray($queryData, $this->db) as $item) { /** @var PublickLinkOldData $data */ $data = Util::unserialize(PublickLinkOldData::class, $item->data, 'SP\DataModel\PublicLinkData'); $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->getMaxCountViews()); $itemData->setUseInfo($data->getUseInfo()); $itemData->setData($data->getData()); $publicLinkService->update($itemData); $this->eventDispatcher->notifyEvent('upgrade.publicLink.process', new Event($this, EventMessage::factory() ->addDescription(__u('Enlace actualizado')) ->addDetail(__u('Enlace'), $item->id)) ); } if (!DbWrapper::endTransaction($this->db)) { throw new ServiceException(__u('No es posible finalizar una transacción')); } } catch (\Exception $e) { DbWrapper::rollbackTransaction($this->db); processException($e); $this->eventDispatcher->notifyEvent('exception', new Event($e)); } $this->eventDispatcher->notifyEvent('upgrade.publicLink.end', new Event($this, EventMessage::factory() ->addDescription(__u('Actualización de enlaces públicos')) ->addDescription(__FUNCTION__)) ); } protected function initialize() { $this->db = $this->dic->get(Database::class); } }