Open Monograph Press  3.3.0
TemporaryFileManager.inc.php
1 <?php
2 
17 import('lib.pkp.classes.file.PrivateFileManager');
18 
23  function __construct() {
24  parent::__construct();
25 
26  $this->_performPeriodicCleanup();
27  }
28 
33  function getBasePath() {
34  return parent::getBasePath() . '/temp/';
35  }
36 
41  function getFile($fileId, $userId) {
42  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
43  return $temporaryFileDao->getTemporaryFile($fileId, $userId);
44  }
45 
50  function deleteById($fileId, $userId) {
51  $temporaryFile = $this->getFile($fileId, $userId);
52 
53  parent::deleteByPath($this->getBasePath() . $temporaryFile->getServerFileName());
54 
55  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
56  $temporaryFileDao->deleteTemporaryFileById($fileId, $userId);
57  }
58 
65  function downloadById($fileId, $userId, $inline = false) {
66  $temporaryFile = $this->getFile($fileId, $userId);
67  if (isset($temporaryFile)) {
68  $filePath = $this->getBasePath() . $temporaryFile->getServerFileName();
69  return parent::downloadByPath($filePath, null, $inline);
70  } else {
71  return false;
72  }
73  }
74 
81  function handleUpload($fileName, $userId) {
82  // Get the file extension, then rename the file.
83  $fileExtension = $this->parseFileExtension($this->getUploadedFileName($fileName));
84 
85  if (!$this->fileExists($this->getBasePath(), 'dir')) {
86  // Try to create destination directory
87  $this->mkdirtree($this->getBasePath());
88  }
89 
90  $newFileName = basename(tempnam($this->getBasePath(), $fileExtension));
91  if (!$newFileName) return false;
92 
93  if ($this->uploadFile($fileName, $this->getBasePath() . $newFileName)) {
94  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
95  $temporaryFile = $temporaryFileDao->newDataObject();
96 
97  $temporaryFile->setUserId($userId);
98  $temporaryFile->setServerFileName($newFileName);
99  $exploded = explode('.', $_FILES[$fileName]['name']);
100  $temporaryFile->setFileType(PKPString::mime_content_type($this->getBasePath() . $newFileName, array_pop($exploded)));
101  $temporaryFile->setFileSize($_FILES[$fileName]['size']);
102  $temporaryFile->setOriginalFileName($this->truncateFileName($_FILES[$fileName]['name'], 127));
103  $temporaryFile->setDateUploaded(Core::getCurrentDate());
104 
105  $temporaryFileDao->insertObject($temporaryFile);
106 
107  return $temporaryFile;
108 
109  } else {
110  return false;
111  }
112  }
113 
120  function submissionToTemporaryFile($submissionFile, $userId) {
121  // Get the file extension, then rename the file.
122  $fileExtension = $this->parseFileExtension($submissionFile->getServerFileName());
123 
124  if (!$this->fileExists($this->filesDir, 'dir')) {
125  // Try to create destination directory
126  $this->mkdirtree($this->filesDir);
127  }
128 
129  $newFileName = basename(tempnam($this->filesDir, $fileExtension));
130  if (!$newFileName) return false;
131 
132  if (copy($submissionFile->getFilePath(), $this->filesDir . $newFileName)) {
133  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
134  $temporaryFile = $temporaryFileDao->newDataObject();
135 
136  $temporaryFile->setUserId($userId);
137  $temporaryFile->setServerFileName($newFileName);
138  $temporaryFile->setFileType($submissionFile->getFileType());
139  $temporaryFile->setFileSize($submissionFile->getFileSize());
140  $temporaryFile->setOriginalFileName($submissionFile->getOriginalFileName());
141  $temporaryFile->setDateUploaded(Core::getCurrentDate());
142 
143  $temporaryFileDao->insertObject($temporaryFile);
144 
145  return $temporaryFile;
146 
147  } else {
148  return false;
149  }
150  }
151 
157  if (time() % 100 == 0) {
158  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
159  $expiredFiles = $temporaryFileDao->getExpiredFiles();
160  foreach ($expiredFiles as $expiredFile) {
161  $this->deleteById($expiredFile->getId(), $expiredFile->getUserId());
162  }
163  }
164  }
165 }
166 
167 
PrivateFileManager
Class defining operations for private file management.
Definition: PrivateFileManager.inc.php:18
TemporaryFileManager
Definition: TemporaryFileManager.inc.php:19
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
TemporaryFileManager\downloadById
downloadById($fileId, $userId, $inline=false)
Definition: TemporaryFileManager.inc.php:65
FileManager\fileExists
fileExists($filePath, $type='file')
Definition: FileManager.inc.php:375
TemporaryFileManager\submissionToTemporaryFile
submissionToTemporaryFile($submissionFile, $userId)
Definition: TemporaryFileManager.inc.php:120
FileManager\truncateFileName
truncateFileName($fileName, $length=127)
Definition: FileManager.inc.php:510
FileManager\mkdirtree
mkdirtree($dirPath, $perms=null)
Definition: FileManager.inc.php:355
PKPString\mime_content_type
static mime_content_type($filename, $suggestedExtension='')
Definition: PKPString.inc.php:312
TemporaryFileManager\getFile
getFile($fileId, $userId)
Definition: TemporaryFileManager.inc.php:41
TemporaryFileManager\_performPeriodicCleanup
_performPeriodicCleanup()
Definition: TemporaryFileManager.inc.php:156
TemporaryFileManager\getBasePath
getBasePath()
Definition: TemporaryFileManager.inc.php:33
TemporaryFileManager\deleteById
deleteById($fileId, $userId)
Definition: TemporaryFileManager.inc.php:50
TemporaryFileManager\handleUpload
handleUpload($fileName, $userId)
Definition: TemporaryFileManager.inc.php:81
FileManager\parseFileExtension
parseFileExtension($fileName)
Definition: FileManager.inc.php:548
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
FileManager\uploadFile
uploadFile($fileName, $destFileName)
Definition: FileManager.inc.php:134
FileManager\getUploadedFileName
getUploadedFileName($fileName)
Definition: FileManager.inc.php:100
TemporaryFileManager\__construct
__construct()
Definition: TemporaryFileManager.inc.php:23