00001 <?php
00002
00016
00017
00018
00019 import('file.FileManager');
00020
00021 class TemporaryFileManager extends FileManager {
00022
00024 var $filesDir;
00025
00030 function TemporaryFileManager() {
00031 $this->filesDir = Config::getVar('files', 'files_dir') . '/temp/';
00032
00033 $this->_performPeriodicCleanup();
00034 }
00035
00040 function &getFile($fileId, $userId) {
00041 $temporaryFileDao = &DAORegistry::getDAO('TemporaryFileDAO');
00042 $temporaryFile = &$temporaryFileDao->getTemporaryFile($fileId, $userId);
00043 return $temporaryFile;
00044 }
00045
00051 function readFile($fileId, $userId, $output = false) {
00052 $temporaryFile = &$this->getFile($fileId, $userId);
00053
00054 if (isset($temporaryFile)) {
00055 $filePath = $this->filesDir . $temporaryFile->getFileName();
00056 return parent::readFile($filePath, $output);
00057 } else {
00058 return false;
00059 }
00060 }
00061
00066 function deleteFile($fileId, $userId) {
00067 $temporaryFile = &$this->getFile($fileId, $userId);
00068
00069 parent::deleteFile($this->filesDir . $temporaryFile->getFileName());
00070
00071 $temporaryFileDao = &DAORegistry::getDAO('TemporaryFileDAO');
00072 $temporaryFileDao->deleteTemporaryFileById($fileId, $userId);
00073 }
00074
00081 function downloadFile($fileId, $userId, $inline = false) {
00082 $temporaryFile = &$this->getFile($fileId, $userId);
00083 if (isset($temporaryFile)) {
00084 $filePath = $this->filesDir . $temporaryFile->getFileName();
00085 return parent::downloadFile($filePath, null, $inline);
00086 } else {
00087 return false;
00088 }
00089 }
00090
00095 function viewFile($fileId) {
00096 $this->downloadFile($fileId, true);
00097 }
00098
00104 function parseFileExtension($fileName) {
00105 $fileParts = explode('.', $fileName);
00106 if (is_array($fileParts)) {
00107 $fileExtension = $fileParts[count($fileParts) - 1];
00108 }
00109
00110
00111 if (!isset($fileExtension) || strstr($fileExtension, 'php') || strlen($fileExtension) > 6 || !preg_match('/^\w+$/', $fileExtension)) {
00112 $fileExtension = 'txt';
00113 }
00114
00115 return $fileExtension;
00116 }
00117
00124 function handleUpload($fileName, $userId) {
00125
00126 $fileExtension = $this->parseFileExtension($this->getUploadedFileName($fileName));
00127
00128 if (!$this->fileExists($this->filesDir, 'dir')) {
00129
00130 $this->mkdirtree($this->filesDir);
00131 }
00132
00133 $newFileName = basename(tempnam($this->filesDir, $fileExtension));
00134 if (!$newFileName) return false;
00135
00136 if ($this->uploadFile($fileName, $this->filesDir . $newFileName)) {
00137 $temporaryFileDao = &DAORegistry::getDAO('TemporaryFileDAO');
00138 $temporaryFile = &new TemporaryFile();
00139
00140 $temporaryFile->setUserId($userId);
00141 $temporaryFile->setFileName($newFileName);
00142 $temporaryFile->setFileType($_FILES[$fileName]['type']);
00143 $temporaryFile->setFileSize($_FILES[$fileName]['size']);
00144 $temporaryFile->setOriginalFileName(TemporaryFileManager::truncateFileName($_FILES[$fileName]['name'], 127));
00145 $temporaryFile->setDateUploaded(Core::getCurrentDate());
00146
00147 $temporaryFileDao->insertTemporaryFile($temporaryFile);
00148
00149 return $temporaryFile;
00150
00151 } else {
00152 return false;
00153 }
00154 }
00155
00162 function articleToTemporaryFile($articleFile, $userId) {
00163
00164 $fileExtension = $this->parseFileExtension($articleFile->getFileName());
00165
00166 if (!$this->fileExists($this->filesDir, 'dir')) {
00167
00168 $this->mkdirtree($this->filesDir);
00169 }
00170
00171 $newFileName = basename(tempnam($this->filesDir, $fileExtension));
00172 if (!$newFileName) return false;
00173
00174 if (copy($articleFile->getFilePath(), $this->filesDir . $newFileName)) {
00175 $temporaryFileDao = &DAORegistry::getDAO('TemporaryFileDAO');
00176 $temporaryFile = &new TemporaryFile();
00177
00178 $temporaryFile->setUserId($userId);
00179 $temporaryFile->setFileName($newFileName);
00180 $temporaryFile->setFileType($articleFile->getFileType());
00181 $temporaryFile->setFileSize($articleFile->getFileSize());
00182 $temporaryFile->setOriginalFileName($articleFile->getOriginalFileName());
00183 $temporaryFile->setDateUploaded(Core::getCurrentDate());
00184
00185 $temporaryFileDao->insertTemporaryFile($temporaryFile);
00186
00187 return $temporaryFile;
00188
00189 } else {
00190 return false;
00191 }
00192 }
00193
00194 function _performPeriodicCleanup() {
00195 if (time() % 100 == 0) {
00196 $temporaryFileDao = &DAORegistry::getDAO('TemporaryFileDAO');
00197 $expiredFiles = $temporaryFileDao->getExpiredFiles();
00198 foreach ($expiredFiles as $expiredFile) {
00199 $this->deleteFile($expiredFile->getFileId(), $expiredFile->getUserId());
00200 }
00201 }
00202 }
00203 }
00204
00205 ?>