[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
lib
/
pkp
/
classes
/
file
/
[
Home
]
File: PKPLibraryFileManager.php
<?php /** * @file classes/file/PKPLibraryFileManager.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2003-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class PKPLibraryFileManager * * @ingroup file * * @brief Wrapper class for uploading files to a site/context' library directory. */ namespace PKP\file; use PKP\context\LibraryFile; use PKP\context\LibraryFileDAO; use PKP\file\TemporaryFile; use PKP\core\PKPString; use PKP\db\DAORegistry; class PKPLibraryFileManager extends PrivateFileManager { /** @var int Context id for the current context */ public $contextId; /** * Constructor * * @param int $contextId */ public function __construct($contextId) { parent::__construct(); $this->contextId = $contextId; } /** * Get the base path for file storage. * * @return string */ public function getBasePath() { return parent::getBasePath() . '/contexts/' . $this->contextId . '/library/'; } /** * Delete a file by ID. * * @param int $fileId */ public function deleteById($fileId) { $libraryFileDao = DAORegistry::getDAO('LibraryFileDAO'); /** @var LibraryFileDAO $libraryFileDao */ $libraryFile = $libraryFileDao->getById($fileId); parent::deleteByPath($this->getBasePath() . $libraryFile->getServerFileName()); $libraryFileDao->deleteById($fileId); } /** * Generate a filename for a library file. * * @param int $type LIBRARY_FILE_TYPE_... * @param string $originalFileName * * @return string */ public function generateFileName($type, $originalFileName) { $libraryFileDao = DAORegistry::getDAO('LibraryFileDAO'); /** @var LibraryFileDAO $libraryFileDao */ $suffix = $this->getFileSuffixFromType($type); $ext = $this->getExtension($originalFileName); $truncated = $this->truncateFileName($originalFileName, 127 - PKPString::strlen($suffix) - 1); $baseName = PKPString::substr($truncated, 0, PKPString::strpos($originalFileName, $ext) - 1); // Try a simple syntax first $fileName = $baseName . '-' . $suffix . '.' . $ext; if (!$libraryFileDao->filenameExists($this->contextId, $fileName)) { return $fileName; } for ($i = 1; ; $i++) { $fullSuffix = $suffix . '-' . $i; //truncate more if necessary $truncated = $this->truncateFileName($originalFileName, 127 - PKPString::strlen($fullSuffix) - 1); // get the base name and append the suffix $baseName = PKPString::substr($truncated, 0, PKPString::strpos($originalFileName, $ext) - 1); //try the following $fileName = $baseName . '-' . $fullSuffix . '.' . $ext; if (!$libraryFileDao->filenameExists($this->contextId, $fileName)) { return $fileName; } } } /** * Routine to copy a library file from a temporary file. * * @param object $temporaryFile * @param int $libraryFileType LIBRARY_FILE_TYPE_... * * @return false|LibraryFile the generated file, prepared as much as possible for insert (false if upload failed) */ public function ©FromTemporaryFile(&$temporaryFile, $libraryFileType) { $libraryFileDao = DAORegistry::getDAO('LibraryFileDAO'); /** @var LibraryFileDAO $libraryFileDao */ $libraryFile = $libraryFileDao->newDataObject(); $libraryFile = $this->assignFromTemporaryFile($temporaryFile, $libraryFileType, $libraryFile); if (!$this->copyFile($temporaryFile->getFilePath(), $this->getBasePath() . $libraryFile->getServerFileName())) { return false; } return $libraryFile; } /** * Routine to replace a library file from a temporary file. * @param $libraryFileType int LIBRARY_FILE_TYPE_... * @return LibraryFile|false the updated LibraryFile, or false on error */ function replaceFromTemporaryFile(TemporaryFile $temporaryFile, int $libraryFileType, LibraryFile $libraryFile) { $originalServerFilename = $libraryFile->getServerFileName(); $libraryFile = $this->assignFromTemporaryFile($temporaryFile, $libraryFileType, $libraryFile); if (!$this->copyFile($temporaryFile->getFilePath(), $this->getBasePath() . $libraryFile->getServerFileName())) { return false; } if ($originalServerFilename !== $libraryFile->getServerFileName()) { unlink($this->getBasePath() . $originalServerFilename); } return $libraryFile; } /** * Routine to assign metadata to a library file from a temporary file * @param $temporaryFile TemporaryFile * @param $libraryFileType int LIBRARY_FILE_TYPE_... * @param $libraryFile LibraryFile * @return LibraryFile the updated LibraryFile */ function &assignFromTemporaryFile($temporaryFile, $libraryFileType, $libraryFile) { $libraryFile->setDateUploaded($temporaryFile->getDateUploaded()); $libraryFile->setDateModified($temporaryFile->getDateUploaded()); $libraryFile->setFileType($temporaryFile->getFileType()); $libraryFile->setFileSize($temporaryFile->getFileSize()); $libraryFile->setServerFileName($this->generateFileName($libraryFileType, $temporaryFile->getOriginalFileName())); $libraryFile->setOriginalFileName($temporaryFile->getOriginalFileName()); return $libraryFile; } /** * Get the file suffix for the given file type * * @param int $type LIBRARY_FILE_TYPE_... */ public function getFileSuffixFromType($type) { $typeSuffixMap = & $this->getTypeSuffixMap(); return $typeSuffixMap[$type]; } /** * Get the type => suffix mapping array * * @return array */ public function &getTypeSuffixMap() { static $map = [ LibraryFile::LIBRARY_FILE_TYPE_MARKETING => 'MAR', LibraryFile::LIBRARY_FILE_TYPE_PERMISSION => 'PER', LibraryFile::LIBRARY_FILE_TYPE_REPORT => 'REP', LibraryFile::LIBRARY_FILE_TYPE_OTHER => 'OTH' ]; return $map; } /** * Get the symbolic name from the type * * @param int $type LIBRARY_FILE_TYPE_... */ public function getNameFromType($type) { $typeNameMap = & $this->getTypeNameMap(); if (isset($typeNameMap[$type])) { return $typeNameMap[$type]; } else { return false; } } /** * Get the type => locale key mapping array * * @return array */ public function &getTypeTitleKeyMap() { static $map = [ LibraryFile::LIBRARY_FILE_TYPE_MARKETING => 'settings.libraryFiles.category.marketing', LibraryFile::LIBRARY_FILE_TYPE_PERMISSION => 'settings.libraryFiles.category.permissions', LibraryFile::LIBRARY_FILE_TYPE_REPORT => 'settings.libraryFiles.category.reports', LibraryFile::LIBRARY_FILE_TYPE_OTHER => 'settings.libraryFiles.category.other' ]; return $map; } /** * Get the display name locale key from the type title * * @param int $type LIBRARY_FILE_TYPE_... */ public function getTitleKeyFromType($type) { $typeTitleKeyMap = & $this->getTypeTitleKeyMap(); return $typeTitleKeyMap[$type]; } /** * Get the type => name mapping array * * @return array */ public function &getTypeNameMap() { static $typeNameMap = [ LibraryFile::LIBRARY_FILE_TYPE_MARKETING => 'marketing', LibraryFile::LIBRARY_FILE_TYPE_PERMISSION => 'permissions', LibraryFile::LIBRARY_FILE_TYPE_REPORT => 'reports', LibraryFile::LIBRARY_FILE_TYPE_OTHER => 'other', ]; return $typeNameMap; } } if (!PKP_STRICT_MODE) { class_alias('\PKP\file\PKPLibraryFileManager', '\PKPLibraryFileManager'); }