entityManager = $entityManager; $this->config = $config; $this->fileStorageManager = $fileStorageManager; $this->jobSchedulerFactory = $jobSchedulerFactory; } public function run(Data $data): void { $id = $data->getTargetId(); if (!$id) { throw new LogicException(); } /** @var Attachment|null $attachment */ $attachment = $this->entityManager->getEntityById(Attachment::ENTITY_TYPE, $id); if (!$attachment) { return; } if ($attachment->getStorage() !== EspoUploadDir::NAME) { return; } $defaultFileStorage = $this->config->get('defaultFileStorage'); if (!$defaultFileStorage || $defaultFileStorage === EspoUploadDir::NAME) { return; } $stream = $this->fileStorageManager->getStream($attachment); $attachment->set('storage', $defaultFileStorage); $this->fileStorageManager->putStream($attachment, $stream); $this->entityManager->saveEntity($attachment); $this->jobSchedulerFactory->create() ->setClassName(RemoveUploadDirFile::class) ->setData( Data::create() ->withTargetId($attachment->getId()) ) ->setTime( DateTime::createNow() ->modify('+' . self::REMOVE_FILE_PERIOD) ->getDateTime() ) ->schedule(); } }