Open Journal Systems  3.3.0
PKPLibraryFileManager.inc.php
1 <?php
2 
17 import('lib.pkp.classes.context.LibraryFile');
18 import('lib.pkp.classes.file.PrivateFileManager');
19 
21  /* @var Context id for the current context */
22  var $contextId;
23 
28  function __construct($contextId) {
29  parent::__construct();
30  $this->contextId = $contextId;
31  }
32 
37  function getBasePath() {
38  return parent::getBasePath() . '/contexts/' . $this->contextId . '/library/';
39  }
40 
46  function deleteById($fileId) {
47  $libraryFileDao = DAORegistry::getDAO('LibraryFileDAO'); /* @var $libraryFileDao LibraryFileDAO */
48  $libraryFile = $libraryFileDao->getById($fileId);
49 
50  parent::deleteByPath($this->getBasePath() . $libraryFile->getServerFileName());
51 
52  $libraryFileDao->deleteById($fileId);
53  }
54 
61  function generateFileName($type, $originalFileName) {
62  $libraryFileDao = DAORegistry::getDAO('LibraryFileDAO'); /* @var $libraryFileDao LibraryFileDAO */
63  $suffix = $this->getFileSuffixFromType($type);
64  $ext = $this->getExtension($originalFileName);
65  $truncated = $this->truncateFileName($originalFileName, 127 - PKPString::strlen($suffix) - 1);
66  $baseName = PKPString::substr($truncated, 0, PKPString::strpos($originalFileName, $ext) - 1);
67 
68  // Try a simple syntax first
69  $fileName = $baseName . '-' . $suffix . '.' . $ext;
70  if (!$libraryFileDao->filenameExists($this->contextId, $fileName)) return $fileName;
71 
72  for ($i = 1; ; $i++) {
73  $fullSuffix = $suffix . '-' . $i;
74  //truncate more if necessary
75  $truncated = $this->truncateFileName($originalFileName, 127 - PKPString::strlen($fullSuffix) - 1);
76  // get the base name and append the suffix
77  $baseName = PKPString::substr($truncated, 0, PKPString::strpos($originalFileName, $ext) - 1);
78 
79  //try the following
80  $fileName = $baseName . '-' . $fullSuffix . '.' . $ext;
81  if (!$libraryFileDao->filenameExists($this->contextId, $fileName)) {
82  return $fileName;
83  }
84  }
85  }
86 
93  function &copyFromTemporaryFile(&$temporaryFile, $libraryFileType) {
94  $libraryFileDao = DAORegistry::getDAO('LibraryFileDAO'); /* @var $libraryFileDao LibraryFileDAO */
95  $libraryFile = $libraryFileDao->newDataObject();
96 
97  $libraryFile->setDateUploaded($temporaryFile->getDateUploaded());
98  $libraryFile->setDateModified($temporaryFile->getDateUploaded());
99  $libraryFile->setFileType($temporaryFile->getFileType());
100  $libraryFile->setFileSize($temporaryFile->getFileSize());
101  $libraryFile->setServerFileName($this->generateFileName($libraryFileType, $temporaryFile->getOriginalFileName()));
102  $libraryFile->setOriginalFileName($temporaryFile->getOriginalFileName());
103  if (!$this->copyFile($temporaryFile->getFilePath(), $this->getBasePath() . $libraryFile->getServerFileName())) {
104  return false;
105  }
106 
107  return $libraryFile;
108  }
109 
114  function getFileSuffixFromType($type) {
115  $typeSuffixMap =& $this->getTypeSuffixMap();
116  return $typeSuffixMap[$type];
117  }
118 
123  function &getTypeSuffixMap() {
124  static $map = array(
125  LIBRARY_FILE_TYPE_MARKETING => 'MAR',
126  LIBRARY_FILE_TYPE_PERMISSION => 'PER',
127  LIBRARY_FILE_TYPE_REPORT => 'REP',
128  LIBRARY_FILE_TYPE_OTHER => 'OTH'
129  );
130  return $map;
131  }
132 
137  function getNameFromType($type) {
138  $typeNameMap =& $this->getTypeNameMap();
139  if (isset($typeNameMap[$type])) {
140  return $typeNameMap[$type];
141  } else {
142  return false;
143  }
144  }
145 
150  function &getTypeTitleKeyMap() {
151  static $map = array(
152  LIBRARY_FILE_TYPE_MARKETING => 'settings.libraryFiles.category.marketing',
153  LIBRARY_FILE_TYPE_PERMISSION => 'settings.libraryFiles.category.permissions',
154  LIBRARY_FILE_TYPE_REPORT => 'settings.libraryFiles.category.reports',
155  LIBRARY_FILE_TYPE_OTHER => 'settings.libraryFiles.category.other'
156  );
157  return $map;
158  }
159 
164  function getTitleKeyFromType($type) {
165  $typeTitleKeyMap =& $this->getTypeTitleKeyMap();
166  return $typeTitleKeyMap[$type];
167  }
168 
173  function &getTypeNameMap() {
174  static $typeNameMap = array(
175  LIBRARY_FILE_TYPE_MARKETING => 'marketing',
176  LIBRARY_FILE_TYPE_PERMISSION => 'permissions',
177  LIBRARY_FILE_TYPE_REPORT => 'reports',
178  LIBRARY_FILE_TYPE_OTHER => 'other',
179  );
180  return $typeNameMap;
181  }
182 }
183 
184 
PrivateFileManager
Class defining operations for private file management.
Definition: PrivateFileManager.inc.php:18
PKPLibraryFileManager\copyFromTemporaryFile
& copyFromTemporaryFile(&$temporaryFile, $libraryFileType)
Definition: PKPLibraryFileManager.inc.php:96
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPString\substr
static substr($string, $start, $length=null)
Definition: PKPString.inc.php:160
FileManager\copyFile
copyFile($source, $dest)
Definition: FileManager.inc.php:174
PKPLibraryFileManager\getBasePath
getBasePath()
Definition: PKPLibraryFileManager.inc.php:40
FileManager\truncateFileName
truncateFileName($fileName, $length=127)
Definition: FileManager.inc.php:510
PKPLibraryFileManager\getNameFromType
getNameFromType($type)
Definition: PKPLibraryFileManager.inc.php:140
PKPLibraryFileManager\$contextId
$contextId
Definition: PKPLibraryFileManager.inc.php:25
FileManager\getExtension
getExtension($fileName)
Definition: FileManager.inc.php:498
PKPLibraryFileManager\getTypeSuffixMap
& getTypeSuffixMap()
Definition: PKPLibraryFileManager.inc.php:126
PKPString\strlen
static strlen($string)
Definition: PKPString.inc.php:128
PKPLibraryFileManager\getTypeNameMap
& getTypeNameMap()
Definition: PKPLibraryFileManager.inc.php:176
PKPLibraryFileManager\getTitleKeyFromType
getTitleKeyFromType($type)
Definition: PKPLibraryFileManager.inc.php:167
PKPLibraryFileManager\__construct
__construct($contextId)
Definition: PKPLibraryFileManager.inc.php:31
PKPLibraryFileManager
Wrapper class for uploading files to a site/context' library directory.
Definition: PKPLibraryFileManager.inc.php:20
PKPLibraryFileManager\getFileSuffixFromType
getFileSuffixFromType($type)
Definition: PKPLibraryFileManager.inc.php:117
PKPString\strpos
static strpos($haystack, $needle, $offset=0)
Definition: PKPString.inc.php:139
PrivateFileManager\__construct
__construct()
Definition: PrivateFileManager.inc.php:26
PKPLibraryFileManager\deleteById
deleteById($fileId)
Definition: PKPLibraryFileManager.inc.php:49
PKPLibraryFileManager\generateFileName
generateFileName($type, $originalFileName)
Definition: PKPLibraryFileManager.inc.php:64
PKPLibraryFileManager\getTypeTitleKeyMap
& getTypeTitleKeyMap()
Definition: PKPLibraryFileManager.inc.php:153