fileInfoManager = $fileInfoManager; $this->fileInfoFactory = $fileInfoFactory; $this->filesystem = $filesystem; } /** * Save new encrypted file, register it and remove old registered file. * * @param EncodedContext $encodedContext * @return bool */ public function recordNewFile(EncodedContext $encodedContext) { $directory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); $fileRelativePath = $this->getFileRelativePath(); $directory->writeFile($fileRelativePath, $encodedContext->getContent()); $fileInfo = $this->fileInfoManager->load(); $this->registerFile($encodedContext, $fileRelativePath); $this->removeOldFile($fileInfo, $directory); return true; } /** * Return relative path to encoded file. * * @return string */ private function getFileRelativePath() { return $this->fileSubdirectoryPath . hash('sha256', time()) . '/' . $this->encodedFileName; } /** * Register encoded file. * * @param EncodedContext $encodedContext * @param string $fileRelativePath * @return bool */ private function registerFile(EncodedContext $encodedContext, $fileRelativePath) { $newFileInfo = $this->fileInfoFactory->create( [ 'path' => $fileRelativePath, 'initializationVector' => $encodedContext->getInitializationVector(), ] ); $this->fileInfoManager->save($newFileInfo); return true; } /** * Remove previously registered file. * * @param FileInfo $fileInfo * @param WriteInterface $directory * @return bool */ private function removeOldFile(FileInfo $fileInfo, WriteInterface $directory) { if (!$fileInfo->getPath()) { return true; } $directory->delete($fileInfo->getPath()); $directoryName = dirname($fileInfo->getPath()); if ($directoryName !== '.') { $directory->delete($directoryName); } return true; } }