18 import(
'lib.pkp.classes.db.DAO');
19 import(
'lib.pkp.classes.submission.SubmissionFile');
36 function insertObject($submissionFile, $sourceFile, $isUpload =
false) {
37 $fileId = $submissionFile->getFileId();
39 if (!is_numeric($submissionFile->getRevision())) {
41 $submissionFile->setRevision(1);
44 if (!is_bool($submissionFile->getViewable())) {
46 $submissionFile->setViewable(
false);
50 (
int)$submissionFile->getRevision(),
51 (
int)$submissionFile->getSubmissionId(),
52 is_null($submissionFile->getSourceFileId()) ?
null : (
int)$submissionFile->getSourceFileId(),
53 is_null($submissionFile->getSourceRevision()) ?
null : (
int)$submissionFile->getSourceRevision(),
54 $submissionFile->getFileType(),
55 (
int)$submissionFile->getFileSize(),
56 $submissionFile->getOriginalFileName(),
57 (
int)$submissionFile->getFileStage(),
58 (
boolean)$submissionFile->getViewable() ? 1 : 0,
59 is_null($submissionFile->getUploaderUserId()) ?
null : (
int)$submissionFile->getUploaderUserId(),
60 is_null($submissionFile->getAssocType()) ?
null : (
int)$submissionFile->getAssocType(),
61 is_null($submissionFile->getAssocId()) ?
null : (
int)$submissionFile->getAssocId(),
62 is_null($submissionFile->getGenreId()) ?
null : (
int)$submissionFile->getGenreId(),
63 $submissionFile->getDirectSalesPrice(),
64 $submissionFile->getSalesType(),
68 array_unshift($params, (
int) $fileId);
72 sprintf(
'INSERT INTO submission_files
73 (' . ($fileId ?
'file_id, ' :
'') .
'revision, submission_id, source_file_id, source_revision, file_type, file_size, original_file_name, file_stage, date_uploaded, date_modified, viewable, uploader_user_id, assoc_type, assoc_id, genre_id, direct_sales_price, sales_type)
75 (' . ($fileId ?
'?, ' :
'') .
'?, ?, ?, ?, ?, ?, ?, ?, %s, %s, ?, ?, ?, ?, ?, ?, ?)',
76 $this->
datetimeToDB($submissionFile->getDateUploaded()), $this->datetimeToDB($submissionFile->getDateModified())),
81 $submissionFile->setFileId($this->
_getInsertId(
'submission_files',
'file_id'));
84 $submissionLocale = $submissionFile->getSubmissionLocale();
86 $reviewStage = in_array($submissionFile->getFileStage(), array(
87 SUBMISSION_FILE_REVIEW_FILE, SUBMISSION_FILE_REVIEW_ATTACHMENT, SUBMISSION_FILE_REVIEW_REVISION
91 $submissionFile->setName($submissionFile->_generateName(
true), $submissionLocale);
93 if ($isUpload || !$submissionFile->getName($submissionLocale)) {
94 $submissionFile->setName($submissionFile->_generateName(), $submissionLocale);
102 $targetFilePath = $submissionFile->getFilePath();
105 if ($isUpload || $sourceFile != $targetFilePath) {
107 import(
'lib.pkp.classes.file.FileManager');
110 $success = $fileManager->uploadFile($sourceFile, $targetFilePath);
112 assert(is_readable($sourceFile));
113 $success = $fileManager->copyFile($sourceFile, $targetFilePath);
123 assert(is_readable($targetFilePath));
125 return $submissionFile;
139 sprintf(
'UPDATE submission_files
148 original_file_name = ?,
153 uploader_user_id = ?,
157 direct_sales_price = ?,
159 WHERE file_id = ? AND revision = ?',
160 $this->
datetimeToDB($submissionFile->getDateUploaded()), $this->datetimeToDB($submissionFile->getDateModified())),
162 (
int)$submissionFile->getFileId(),
163 (
int)$submissionFile->getRevision(),
164 (
int)$submissionFile->getSubmissionId(),
165 is_null($submissionFile->getSourceFileId()) ?
null : (
int)$submissionFile->getSourceFileId(),
166 is_null($submissionFile->getSourceRevision()) ?
null : (
int)$submissionFile->getSourceRevision(),
167 $submissionFile->getFileType(),
168 $submissionFile->getFileSize(),
169 $submissionFile->getOriginalFileName(),
170 $submissionFile->getFileStage(),
171 (
boolean)$submissionFile->getViewable() ? 1 : 0,
172 is_null($submissionFile->getUploaderUserId()) ?
null : (
int)$submissionFile->getUploaderUserId(),
173 is_null($submissionFile->getAssocType()) ?
null : (
int)$submissionFile->getAssocType(),
174 is_null($submissionFile->getAssocId()) ?
null : (
int)$submissionFile->getAssocId(),
175 is_null($submissionFile->getGenreId()) ?
null : (
int)$submissionFile->getGenreId(),
176 $submissionFile->getDirectSalesPrice(),
177 $submissionFile->getSalesType(),
178 (
int)$previousFile->getFileId(),
179 (
int)$previousFile->getRevision(),
190 $previousFilePath = $previousFile->getFilePath();
191 $targetFilePath = $submissionFile->getFilePath();
192 if ($previousFilePath != $targetFilePath && is_file($previousFilePath)) {
195 assert(is_readable($previousFilePath));
196 import(
'lib.pkp.classes.file.FileManager');
198 if (!$fileManager->copyFile($previousFilePath, $targetFilePath))
return false;
199 if (!$fileManager->deleteByPath($previousFilePath))
return false;
202 return file_exists($targetFilePath);
212 'DELETE FROM submission_files
213 WHERE file_id = ? AND revision = ?',
215 (
int)$submissionFile->getFileId(),
216 (
int)$submissionFile->getRevision()
222 'SELECT * FROM submission_files WHERE file_id = ?',
223 array((
int)$submissionFile->getFileId())
226 if ($result->RecordCount() == 0) {
227 $this->
update(
'DELETE FROM submission_file_settings WHERE file_id = ?',
228 array((
int) $submissionFile->getFileId()));
235 $filePath = $submissionFile->getFilePath();
236 if(!(is_file($filePath) && is_readable($filePath)))
return false;
237 assert(is_writable(dirname($filePath)));
239 import(
'lib.pkp.classes.file.FileManager');
241 $fileManager->deleteByPath($filePath);
243 return !file_exists($filePath);
253 $submissionFile->setFileId((
int)$row[
'submission_file_id']);
254 $submissionFile->setSubmissionLocale($row[
'submission_locale']);
255 $submissionFile->setRevision((
int)$row[
'submission_revision']);
256 $submissionFile->setAssocType(is_null($row[
'assoc_type']) ?
null : (
int)$row[
'assoc_type']);
257 $submissionFile->setAssocId(is_null($row[
'assoc_id']) ?
null : (
int)$row[
'assoc_id']);
258 $submissionFile->setSourceFileId(is_null($row[
'source_file_id']) ?
null : (
int)$row[
'source_file_id']);
259 $submissionFile->setSourceRevision(is_null($row[
'source_revision']) ?
null : (
int)$row[
'source_revision']);
260 $submissionFile->setSubmissionId((
int)$row[
'submission_id']);
261 $submissionFile->setFileStage((
int)$row[
'file_stage']);
262 $submissionFile->setOriginalFileName($row[
'original_file_name']);
263 $submissionFile->setFileType($row[
'file_type']);
264 $submissionFile->setGenreId(is_null($row[
'genre_id']) ?
null : (
int)$row[
'genre_id']);
265 $submissionFile->setFileSize((
int)$row[
'file_size']);
266 $submissionFile->setUploaderUserId(is_null($row[
'uploader_user_id']) ?
null : (
int)$row[
'uploader_user_id']);
267 $submissionFile->setViewable((
boolean)$row[
'viewable']);
268 $submissionFile->setDateUploaded($this->
datetimeFromDB($row[
'date_uploaded']));
269 $submissionFile->setDateModified($this->
datetimeFromDB($row[
'date_modified']));
270 $submissionFile->setDirectSalesPrice($row[
'direct_sales_price']);
271 $submissionFile->setSalesType($row[
'sales_type']);
273 $this->
getDataObjectSettings(
'submission_file_settings',
'file_id', $row[
'submission_file_id'], $submissionFile);
275 return $submissionFile;
295 $localeFieldNames = parent::getLocaleFieldNames();
296 $localeFieldNames[] =
'name';
297 return $localeFieldNames;
306 $additionalFields = parent::getAdditionalFieldNames();
307 $additionalFields[] =
'pub-id::publisher-id';
308 $additionalFields[] =
'chapterId';
309 return $additionalFields;
319 'file_id' => $submissionFile->getFileId()
334 function pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId) {
337 FROM submission_file_settings sfs
338 INNER JOIN submission_files sf ON sfs.file_id = sf.file_id
339 INNER JOIN submissions s ON sf.submission_id = s.submission_id
340 WHERE sfs.setting_name = ? AND sfs.setting_value = ? AND sfs.file_id <> ? AND s.context_id = ?',
342 'pub-id::'.$pubIdType,
344 (
int) $excludePubObjectId,
348 $returner = $result->fields[0] ? true :
false;
358 'file_id',
'locale',
'setting_name'
360 $updateArray = array(
361 'file_id' => (
int) $pubObjectId,
363 'setting_name' =>
'pub-id::'.$pubIdType,
364 'setting_type' =>
'string',
365 'setting_value' => (
string)$pubId
367 $this->
replace(
'submission_file_settings', $updateArray, $idFields);
375 $settingName =
'pub-id::'.$pubIdType;
377 'DELETE FROM submission_file_settings WHERE setting_name = ? AND file_id = ?',
390 $settingName =
'pub-id::'.$pubIdType;
393 $submissions = $submissionDao->getByContextId($contextId);
395 while ($submission = $submissions->next()) {
396 $submissionFiles = $submissionFileDao->getBySubmissionId($submission->getId());
397 foreach ($submissionFiles as $submissionFile) {
399 'DELETE FROM submission_file_settings WHERE setting_name = ? AND file_id = ?',
402 (
int)$submissionFile->getFileId()
422 $previousFile->getFileId() == $submissionFile->getFileId() ||
423 $previousFile->getRevision() == $submissionFile->getRevision()
428 $viewsDao->moveViews(
429 ASSOC_TYPE_SUBMISSION_FILE,
430 $previousFile->getFileIdAndRevision(), $submissionFile->getFileIdAndRevision()
441 $viewsDao->deleteViews(
442 ASSOC_TYPE_SUBMISSION_FILE, $submissionFile->getFileIdAndRevision()