Open Journal Systems  3.3.0
SubmissionFile.inc.php
1 <?php
2 
16 import('lib.pkp.classes.file.PKPFile');
17 
18 // Define the file stage identifiers.
19 define('SUBMISSION_FILE_SUBMISSION', 2);
20 define('SUBMISSION_FILE_NOTE', 3);
21 define('SUBMISSION_FILE_REVIEW_FILE', 4);
22 define('SUBMISSION_FILE_REVIEW_ATTACHMENT', 5);
23 // SUBMISSION_FILE_REVIEW_REVISION defined below (FIXME: re-order before release)
24 define('SUBMISSION_FILE_FINAL', 6);
25 define('SUBMISSION_FILE_FAIR_COPY', 7);
26 define('SUBMISSION_FILE_EDITOR', 8);
27 define('SUBMISSION_FILE_COPYEDIT', 9);
28 define('SUBMISSION_FILE_PROOF', 10);
29 define('SUBMISSION_FILE_PRODUCTION_READY', 11);
30 define('SUBMISSION_FILE_ATTACHMENT', 13);
31 define('SUBMISSION_FILE_REVIEW_REVISION', 15);
32 define('SUBMISSION_FILE_DEPENDENT', 17);
33 define('SUBMISSION_FILE_QUERY', 18);
34 
35 class SubmissionFile extends PKPFile {
36 
44  function &getLocalizedData($key, $preferredLocale = null) {
45  if (is_null($preferredLocale)) $preferredLocale = AppLocale::getLocale();
46  $localePrecedence = array($preferredLocale, $this->getSubmissionLocale());
47  foreach ($localePrecedence as $locale) {
48  if (empty($locale)) continue;
49  $value =& $this->getData($key, $locale);
50  if (!empty($value)) return $value;
51  unset($value);
52  }
53 
54  // Fallback: Get the first available piece of data.
55  $data =& $this->getData($key, null);
56  foreach ((array) $data as $dataValue) {
57  if (!empty($dataValue)) return $dataValue;
58  }
59 
60  // No data available; return null.
61  unset($data);
62  $data = null;
63  return $data;
64  }
65 
66  //
67  // Getters and Setters
68  //
73  function getFileId() {
74  // WARNING: Do not modernize getter/setters without considering
75  // ID clash with subclasses ArticleGalley and ArticleNote!
76  return $this->getData('fileId');
77  }
78 
83  function setFileId($fileId) {
84  // WARNING: Do not modernize getter/setters without considering
85  // ID clash with subclasses ArticleGalley and ArticleNote!
86  $this->setData('fileId', $fileId);
87  }
88 
93  function getId() {
94  // WARNING: Do not modernize getter/setters without considering
95  // ID clash with subclasses ArticleGalley and ArticleNote!
96  return $this->getData('fileId');
97  }
98 
103  function setId($fileId) {
104  // WARNING: Do not modernize getter/setters without considering
105  // ID clash with subclasses ArticleGalley and ArticleNote!
106  $this->setData('fileId', $fileId);
107  }
108 
116  function getSubmissionLocale() {
117  return $this->getData('submissionLocale');
118  }
119 
127  function setSubmissionLocale($submissionLocale) {
128  $this->setData('submissionLocale', $submissionLocale);
129  }
130 
135  function getSourceFileId() {
136  return $this->getData('sourceFileId');
137  }
138 
143  function setSourceFileId($sourceFileId) {
144  $this->setData('sourceFileId', $sourceFileId);
145  }
146 
151  function getSourceRevision() {
152  return $this->getData('sourceRevision');
153  }
154 
159  function setSourceRevision($sourceRevision) {
160  $this->setData('sourceRevision', $sourceRevision);
161  }
162 
167  function getAssocId() {
168  return $this->getData('assocId');
169  }
170 
175  function setAssocId($assocId) {
176  $this->setData('assocId', $assocId);
177  }
178 
186  function getStoredPubId($pubIdType) {
187  return $this->getData('pub-id::'.$pubIdType);
188  }
189 
197  function setStoredPubId($pubIdType, $pubId) {
198  $this->setData('pub-id::'.$pubIdType, $pubId);
199  }
200 
206  function getDirectSalesPrice() {
207  return $this->getData('directSalesPrice');
208  }
209 
215  function setDirectSalesPrice($directSalesPrice) {
216  $this->setData('directSalesPrice', $directSalesPrice);
217  }
218 
223  function getSalesType() {
224  return $this->getData('salesType');
225  }
226 
231  function setSalesType($salesType) {
232  $this->setData('salesType', $salesType);
233  }
234 
240  function setName($name, $locale) {
241  $this->setData('name', $name, $locale);
242  }
243 
249  function getName($locale) {
250  return $this->getData('name', $locale);
251  }
252 
257  function getLocalizedName() {
258  return $this->getLocalizedData('name');
259  }
260 
266  return !in_array($this->getFileStage(), array(SUBMISSION_FILE_DEPENDENT, SUBMISSION_FILE_QUERY)) && in_array($this->getFileType(), array(
267  'text/html',
268  'application/xml',
269  'text/xml',
270  ));
271  }
272 
277  function getExtension() {
278  import('lib.pkp.classes.file.FileManager');
279  $fileManager = new FileManager();
280  return $fileManager->parseFileExtension($this->getOriginalFileName());
281  }
282 
287  function getDocumentType() {
288  import('lib.pkp.classes.file.FileManager');
289  $fileManager = new FileManager();
290  return $fileManager->getDocumentType($this->getFileType());
291  }
292 
298  function setGenreId($genreId) {
299  $this->setData('genreId', $genreId);
300  }
301 
307  function getGenreId() {
308  return $this->getData('genreId');
309  }
310 
315  function getRevision() {
316  return $this->getData('revision');
317  }
318 
324  function getBestId() {
325  $publicFileId = $this->getStoredPubId('publisher-id');
326  if (!empty($publicFileId)) return $publicFileId;
327  return $this->getFileIdAndRevision();
328  }
329 
335  function getFileIdAndRevision() {
336  $id = $this->getFileId();
337  $revision = $this->getRevision();
338  $idAndRevision = $id;
339  if ($revision) {
340  $idAndRevision .= '-'.$revision;
341  }
342  return $idAndRevision;
343  }
344 
349  function setRevision($revision) {
350  $this->setData('revision', $revision);
351  }
352 
357  function getSubmissionId() {
358  return $this->getData('submissionId');
359  }
360 
365  function setSubmissionId($submissionId) {
366  $this->setData('submissionId', $submissionId);
367  }
368 
373  function getFileStage() {
374  return $this->getData('fileStage');
375  }
376 
381  function setFileStage($fileStage) {
382  $this->setData('fileStage', $fileStage);
383  }
384 
390  function getDateModified() {
391  return $this->getData('dateModified');
392  }
393 
399  function setDateModified($dateModified) {
400  return $this->setData('dateModified', $dateModified);
401  }
402 
408  function getRound() {
409  return $this->getData('round');
410  }
411 
416  function setRound($round) {
417  return $this->setData('round', $round);
418  }
419 
424  function getViewable() {
425  return $this->getData('viewable');
426  }
427 
428 
433  function setViewable($viewable) {
434  return $this->setData('viewable', $viewable);
435  }
436 
441  function setUploaderUserId($uploaderUserId) {
442  $this->setData('uploaderUserId', $uploaderUserId);
443  }
444 
449  function getUploaderUserId() {
450  return $this->getData('uploaderUserId');
451  }
452 
457  function getAssocType() {
458  return $this->getData('assocType');
459  }
460 
465  function setAssocType($assocType) {
466  $this->setData('assocType', $assocType);
467  }
468 
473  function getChapterId() {
474  return $this->getData('chapterId');
475  }
476 
481  function setChapterId($chapterId) {
482  $this->setData('chapterId', $chapterId);
483  }
484 
488  function getFilePath() {
489  // Get the context ID
490  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
491  $submission = $submissionDao->getById($this->getSubmissionId());
492  if (!$submission) return null;
493  $contextId = $submission->getContextId();
494  unset($submission);
495 
496  // Construct the file path
497  import('lib.pkp.classes.file.SubmissionFileManager');
498  $submissionFileManager = new SubmissionFileManager($contextId, $this->getSubmissionId());
499  return $submissionFileManager->getBasePath() . $this->_fileStageToPath($this->getFileStage()) . '/' . $this->getServerFileName();
500  }
501 
506  function getFileLabel($locale = null) {
507  // Retrieve the localized file name as basis for the label.
508  if ($locale) {
509  $fileLabel = $this->getName($locale);
510  } else {
511  $fileLabel = $this->getLocalizedName();
512  }
513 
514  // If we have no file name then use a default name.
515  if (empty($fileLabel)) $fileLabel = $this->getOriginalFileName();
516 
517  // Add the revision number to the label if we have more than one revision.
518  if ($this->getRevision() > 1) $fileLabel .= ' (' . $this->getRevision() . ')';
519 
520  return $fileLabel;
521  }
522 
523 
529  function copyEditableMetadataFrom($submissionFile) {
530  assert(is_a($submissionFile, 'SubmissionFile'));
531  $this->setName($submissionFile->getName(null), null);
532  $this->setChapterId($submissionFile->getChapterId());
533  }
534 
539  function getClientFileName() {
540  // Generate a human readable time stamp.
541  $timestamp = date('Ymd', strtotime($this->getDateUploaded()));
542 
543  $genreDao = DAORegistry::getDAO('GenreDAO'); /* @var $genreDao GenreDAO */
544  $genre = $genreDao->getById($this->getGenreId());
545 
546  // Make the file name unique across all files and file revisions.
547  // Also make sure that files can be ordered sensibly by file name.
548  return $this->getSubmissionId() . '-'.
549  ($genre? ($genre->getLocalizedName() . '-'):'') .
550  $this->getFileId() . '-' .
551  $this->getRevision() . '-' .
552  $this->getFileStage() . '-' .
553  $timestamp .
554  '.' .
555  $this->getExtension();
556  }
557 
558  //
559  // Overridden public methods from PKPFile
560  //
566  function getServerFileName() {
567  return $this->_generateFileName();
568  }
569 
575  function setServerFileName($fileName) {
576  assert(false);
577  }
578 
583  function getViews() {
585  return $application->getPrimaryMetricByAssoc(ASSOC_TYPE_SUBMISSION_FILE, $this->getFileId());
586  }
587 
588  //
589  // Private helper methods
590  //
591 
596  function _generateFileName() {
597  // Generate a human readable time stamp.
598  $timestamp = date('Ymd', strtotime($this->getDateUploaded()));
599 
600  // Make the file name unique across all files and file revisions.
601  // Also make sure that files can be ordered sensibly by file name.
602  return $this->getSubmissionId() . '-'.
603  $this->getGenreId() . '-' .
604  $this->getFileId() . '-' .
605  $this->getRevision() . '-' .
606  $this->getFileStage() . '-' .
607  $timestamp .
608  '.' .
610  }
611 
617  function _generateName($anonymous = false) {
618  $genreDao = DAORegistry::getDAO('GenreDAO'); /* @var $genreDao GenreDAO */
619  $genre = $genreDao->getById($this->getGenreId());
620  $userDAO = DAORegistry::getDAO('UserDAO');
621  $user = $userDAO->getById($this->getUploaderUserId());
622 
623  $submissionLocale = $this->getSubmissionLocale();
624  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_COMMON, $submissionLocale);
625 
626  $genreName = '';
627  if ($genre) {
628  $genreName = $genre->getName($submissionLocale) ? $genre->getName($submissionLocale) : $genre->getLocalizedName();
629  }
630 
631  $localeKey = $anonymous ? 'common.file.anonymousNamingPattern' : 'common.file.namingPattern';
632  return __($localeKey,
633  array(
634  'genre' => $genreName,
635  'docType' => $this->getDocumentType(),
636  'originalFilename' => $this->getOriginalFilename(),
637  'username' => $user->getUsername(),
638  ),
639  $submissionLocale
640  );
641  }
642 
648  function _fileStageToPath($fileStage) {
649  static $fileStageToPath = array(
650  0 => '', // Temporary files do not use stages
651  SUBMISSION_FILE_SUBMISSION => 'submission',
652  SUBMISSION_FILE_NOTE => 'note',
653  SUBMISSION_FILE_REVIEW_FILE => 'submission/review',
654  SUBMISSION_FILE_REVIEW_ATTACHMENT => 'submission/review/attachment',
655  SUBMISSION_FILE_REVIEW_REVISION => 'submission/review/revision',
656  SUBMISSION_FILE_FINAL => 'submission/final',
657  SUBMISSION_FILE_FAIR_COPY => 'submission/fairCopy',
658  SUBMISSION_FILE_EDITOR => 'submission/editor',
659  SUBMISSION_FILE_COPYEDIT => 'submission/copyedit',
660  SUBMISSION_FILE_DEPENDENT => 'submission/proof',
661  SUBMISSION_FILE_PROOF => 'submission/proof',
662  SUBMISSION_FILE_PRODUCTION_READY => 'submission/productionReady',
663  SUBMISSION_FILE_ATTACHMENT => 'attachment',
664  SUBMISSION_FILE_QUERY => 'submission/query',
665  );
666 
667  assert(isset($fileStageToPath[$fileStage]));
668  return $fileStageToPath[$fileStage];
669  }
670 
671  //
672  // Public methods
673  //
680  function getMetadataForm($stageId, $reviewRound) {
681  import('lib.pkp.controllers.wizard.fileUpload.form.SubmissionFilesMetadataForm');
682  return new SubmissionFilesMetadataForm($this, $stageId, $reviewRound);
683  }
684 
688  function getDAO() {
689  return DAORegistry::getDAO('SubmissionFileDAO');
690  }
691 }
692 
693 
PKPFile\getFileType
getFileType()
Definition: PKPFile.inc.php:57
DataObject\getData
& getData($key, $locale=null)
Definition: DataObject.inc.php:100
SubmissionFile\setRound
setRound($round)
Definition: SubmissionFile.inc.php:416
SubmissionFile\_generateFileName
_generateFileName()
Definition: SubmissionFile.inc.php:596
SubmissionFile\getClientFileName
getClientFileName()
Definition: SubmissionFile.inc.php:539
SubmissionFileManager
Helper class for database-backed submission file management tasks.
Definition: SubmissionFileManager.inc.php:30
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
SubmissionFile\getFileLabel
getFileLabel($locale=null)
Definition: SubmissionFile.inc.php:506
SubmissionFile\setAssocId
setAssocId($assocId)
Definition: SubmissionFile.inc.php:175
SubmissionFile\getAssocType
getAssocType()
Definition: SubmissionFile.inc.php:457
$application
$application
Definition: index.php:65
SubmissionFile\getSourceRevision
getSourceRevision()
Definition: SubmissionFile.inc.php:151
SubmissionFile\setChapterId
setChapterId($chapterId)
Definition: SubmissionFile.inc.php:481
SubmissionFile\setId
setId($fileId)
Definition: SubmissionFile.inc.php:103
SubmissionFile\setRevision
setRevision($revision)
Definition: SubmissionFile.inc.php:349
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubmissionFile\setName
setName($name, $locale)
Definition: SubmissionFile.inc.php:240
SubmissionFile\setFileStage
setFileStage($fileStage)
Definition: SubmissionFile.inc.php:381
SubmissionFile\setSalesType
setSalesType($salesType)
Definition: SubmissionFile.inc.php:231
SubmissionFile\getName
getName($locale)
Definition: SubmissionFile.inc.php:249
SubmissionFile
Submission file class.
Definition: SubmissionFile.inc.php:35
SubmissionFile\getViewable
getViewable()
Definition: SubmissionFile.inc.php:424
SubmissionFile\getUploaderUserId
getUploaderUserId()
Definition: SubmissionFile.inc.php:449
SubmissionFile\getServerFileName
getServerFileName()
Definition: SubmissionFile.inc.php:566
SubmissionFile\getSubmissionId
getSubmissionId()
Definition: SubmissionFile.inc.php:357
SubmissionFile\getBestId
getBestId()
Definition: SubmissionFile.inc.php:324
SubmissionFile\getId
getId()
Definition: SubmissionFile.inc.php:93
PKPFile\getDateUploaded
getDateUploaded()
Definition: PKPFile.inc.php:73
SubmissionFile\getDirectSalesPrice
getDirectSalesPrice()
Definition: SubmissionFile.inc.php:206
SubmissionFile\setFileId
setFileId($fileId)
Definition: SubmissionFile.inc.php:83
SubmissionFile\getGenreId
getGenreId()
Definition: SubmissionFile.inc.php:307
SubmissionFilesMetadataForm
Form for editing a submission file's metadata.
Definition: SubmissionFilesMetadataForm.inc.php:18
SubmissionFile\copyEditableMetadataFrom
copyEditableMetadataFrom($submissionFile)
Definition: SubmissionFile.inc.php:529
SubmissionFile\getSourceFileId
getSourceFileId()
Definition: SubmissionFile.inc.php:135
SubmissionFile\setDateModified
setDateModified($dateModified)
Definition: SubmissionFile.inc.php:399
SubmissionFile\getDAO
getDAO()
Definition: SubmissionFile.inc.php:688
SubmissionFile\setSubmissionId
setSubmissionId($submissionId)
Definition: SubmissionFile.inc.php:365
SubmissionFile\getFileIdAndRevision
getFileIdAndRevision()
Definition: SubmissionFile.inc.php:335
SubmissionFile\setUploaderUserId
setUploaderUserId($uploaderUserId)
Definition: SubmissionFile.inc.php:441
SubmissionFile\getRound
getRound()
Definition: SubmissionFile.inc.php:408
SubmissionFile\getMetadataForm
getMetadataForm($stageId, $reviewRound)
Definition: SubmissionFile.inc.php:680
SubmissionFile\getAssocId
getAssocId()
Definition: SubmissionFile.inc.php:167
SubmissionFile\getLocalizedData
& getLocalizedData($key, $preferredLocale=null)
Definition: SubmissionFile.inc.php:44
SubmissionFile\supportsDependentFiles
supportsDependentFiles()
Definition: SubmissionFile.inc.php:265
SubmissionFile\getExtension
getExtension()
Definition: SubmissionFile.inc.php:277
SubmissionFile\_generateName
_generateName($anonymous=false)
Definition: SubmissionFile.inc.php:617
SubmissionFile\_fileStageToPath
_fileStageToPath($fileStage)
Definition: SubmissionFile.inc.php:648
SubmissionFile\getFileStage
getFileStage()
Definition: SubmissionFile.inc.php:373
PKPFile
Base PKP file class.
Definition: PKPFile.inc.php:16
SubmissionFile\setSourceFileId
setSourceFileId($sourceFileId)
Definition: SubmissionFile.inc.php:143
SubmissionFile\setServerFileName
setServerFileName($fileName)
Definition: SubmissionFile.inc.php:575
SubmissionFile\setSourceRevision
setSourceRevision($sourceRevision)
Definition: SubmissionFile.inc.php:159
SubmissionFile\setGenreId
setGenreId($genreId)
Definition: SubmissionFile.inc.php:298
SubmissionFile\getLocalizedName
getLocalizedName()
Definition: SubmissionFile.inc.php:257
strtolower_codesafe
strtolower_codesafe($str)
Definition: functions.inc.php:280
SubmissionFile\getFilePath
getFilePath()
Definition: SubmissionFile.inc.php:488
SubmissionFile\getViews
getViews()
Definition: SubmissionFile.inc.php:583
SubmissionFile\getFileId
getFileId()
Definition: SubmissionFile.inc.php:73
SubmissionFile\setAssocType
setAssocType($assocType)
Definition: SubmissionFile.inc.php:465
SubmissionFile\getDateModified
getDateModified()
Definition: SubmissionFile.inc.php:390
SubmissionFile\getSubmissionLocale
getSubmissionLocale()
Definition: SubmissionFile.inc.php:116
PKPFile\getOriginalFileName
getOriginalFileName()
Definition: PKPFile.inc.php:41
SubmissionFile\setSubmissionLocale
setSubmissionLocale($submissionLocale)
Definition: SubmissionFile.inc.php:127
SubmissionFile\setDirectSalesPrice
setDirectSalesPrice($directSalesPrice)
Definition: SubmissionFile.inc.php:215
SubmissionFile\getStoredPubId
getStoredPubId($pubIdType)
Definition: SubmissionFile.inc.php:186
SubmissionFile\getRevision
getRevision()
Definition: SubmissionFile.inc.php:315
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
FileManager
Class defining basic operations for file management.
Definition: FileManager.inc.php:35
SubmissionFile\setStoredPubId
setStoredPubId($pubIdType, $pubId)
Definition: SubmissionFile.inc.php:197
SubmissionFile\setViewable
setViewable($viewable)
Definition: SubmissionFile.inc.php:433
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
SubmissionFile\getChapterId
getChapterId()
Definition: SubmissionFile.inc.php:473
SubmissionFile\getSalesType
getSalesType()
Definition: SubmissionFile.inc.php:223
DataObject\setData
setData($key, $value, $locale=null)
Definition: DataObject.inc.php:132
SubmissionFile\getDocumentType
getDocumentType()
Definition: SubmissionFile.inc.php:287