/** * Moves file to public storage if $public is true. Otherwise moves to private. * @param File $file * @param boolean $public */ private function setPublicForFile(File $file, $public) { if ($public == $file->isPublic()) { $msg = $file->getId() . ' ' . $file->getFileName() . ' is already '; $msg .= $file->isPublic() ? 'public' : 'private'; $this->container->getLogger()->info($msg); return; } $fileList = array(); // prepare list of files to be moved $fileList[] = $file->getPath(DIRECTORY_SEPARATOR, true); if ($file instanceof Image) { $sizes = $file->getImageSizeCollection(); if (!$sizes->isEmpty()) { $fileDir = $file->getPath(DIRECTORY_SEPARATOR, false) . DIRECTORY_SEPARATOR . self::RESERVED_DIR_SIZE . DIRECTORY_SEPARATOR; foreach ($sizes as $size) { $sizeDir = $fileDir . DIRECTORY_SEPARATOR . $size->getFolderName() . DIRECTORY_SEPARATOR; $externalPath = $this->getExternalPath() . $sizeDir; $this->createFolderInFileSystem($externalPath); $internalPath = $this->getInternalPath() . $sizeDir; $this->createFolderInFileSystem($internalPath); $fileList[] = $fileDir . DIRECTORY_SEPARATOR . $size->getFolderName() . DIRECTORY_SEPARATOR . $file->getFileName(); } } } $folder = $file->getParent(); if ($public) { foreach ($fileList as $filePath) { $this->moveFileToExternalStorage($filePath, $folder); } $file->setPublic(true); } else { foreach ($fileList as $filePath) { $this->moveFileToInternalStorage($filePath, $folder); } $file->setPublic(false); } $file->setModificationTime(); }