Open Journal Systems  3.3.0
PKPSubmissionFilesUploadBaseForm.inc.php
1 <?php
2 
17 import('lib.pkp.classes.form.Form');
18 import('lib.pkp.classes.submission.SubmissionFile');
19 
21 
23  var $_stageId;
24 
27 
30 
42  function __construct($request, $template, $submissionId, $stageId, $fileStage,
43  $revisionOnly = false, $reviewRound = null, $revisedFileId = null, $assocType = null, $assocId = null) {
44 
45  // Check the incoming parameters.
46  if ( !is_numeric($submissionId) || $submissionId <= 0 ||
47  !is_numeric($fileStage) || $fileStage <= 0 ||
48  !is_numeric($stageId) || $stageId < 1 || $stageId > 5 ||
49  isset($assocType) !== isset($assocId)) {
50  fatalError('Invalid parameters!');
51  }
52 
53  // Initialize class.
54  parent::__construct($template);
55  $this->_stageId = $stageId;
56 
57  if ($reviewRound) {
58  $this->_reviewRound =& $reviewRound;
59  } else if ($assocType == ASSOC_TYPE_REVIEW_ASSIGNMENT && !$reviewRound) {
60  // Get the review assignment object.
61  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
62  $reviewAssignment = $reviewAssignmentDao->getById((int) $assocId); /* @var $reviewAssignment ReviewAssignment */
63  if ($reviewAssignment->getDateCompleted()) fatalError('Review already completed!');
64 
65  // Get the review round object.
66  $reviewRoundDao = DAORegistry::getDAO('ReviewRound');
67  $this->_reviewRound = $reviewRoundDao->getById($reviewAssignment->getReviewRoundId());
68  } else if (!$assocType && !$reviewRound) {
69  $reviewRound = null;
70  }
71 
72  $this->setData('fileStage', (int)$fileStage);
73  $this->setData('submissionId', (int)$submissionId);
74  $this->setData('revisionOnly', (boolean)$revisionOnly);
75  $this->setData('revisedFileId', $revisedFileId ? (int)$revisedFileId : null);
76  $this->setData('reviewRoundId', $reviewRound?$reviewRound->getId():null);
77  $this->setData('assocType', $assocType ? (int)$assocType : null);
78  $this->setData('assocId', $assocId ? (int)$assocId : null);
79 
80  // Add validators.
81  $this->addCheck(new FormValidatorPost($this));
82  }
83 
84 
85  //
86  // Setters and Getters
87  //
92  function getStageId() {
93  return $this->_stageId;
94  }
95 
100  function getReviewRound() {
102  }
103 
108  function getRevisedFileId() {
109  return $this->getData('revisedFileId') ? (int)$this->getData('revisedFileId') : null;
110  }
111 
116  function getAssocType() {
117  return $this->getData('assocType');
118  }
119 
124  function getAssocId() {
125  return $this->getData('assocId');
126  }
127 
133  function getSubmissionFiles() {
134  if (is_null($this->_submissionFiles)) {
135  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
136  if ($this->getStageId() == WORKFLOW_STAGE_ID_INTERNAL_REVIEW || $this->getStageId() == WORKFLOW_STAGE_ID_EXTERNAL_REVIEW) {
137  // If we have a review stage id then we also expect a review round.
138  if (!$this->getData('fileStage') == SUBMISSION_FILE_QUERY && !is_a($this->getReviewRound(), 'ReviewRound')) assert(false);
139  // Can only upload submission files, review files, review attachments, dependent files, or query attachments.
140  if (!in_array($this->getData('fileStage'), array(SUBMISSION_FILE_SUBMISSION, SUBMISSION_FILE_REVIEW_FILE, SUBMISSION_FILE_REVIEW_ATTACHMENT, SUBMISSION_FILE_REVIEW_REVISION, SUBMISSION_FILE_QUERY, SUBMISSION_FILE_DEPENDENT, SUBMISSION_FILE_ATTACHMENT))) fatalError('Invalid file stage!');
141 
142  // Hide the revision selector for review
143  // attachments to make it easier for reviewers
144  $reviewRound = $this->getReviewRound();
145  if ($this->getData('fileStage') == SUBMISSION_FILE_REVIEW_ATTACHMENT) {
146  $this->_submissionFiles = array();
147  } elseif ($reviewRound) {
148  // Retrieve the submission files for the given review round.
149  $this->_submissionFiles = $submissionFileDao->getRevisionsByReviewRound($reviewRound);
150  } else {
151  // No review round, e.g. for dependent or query files
152  $this->_submissionFiles = array();
153  }
154  } else {
155  // Retrieve the submission files for the given file stage.
156  if (!$this->getAssocType() || $this->getAssocType() == ASSOC_TYPE_SUBMISSION) {
157  $this->_submissionFiles = $submissionFileDao->getLatestRevisions(
158  $this->getData('submissionId'), $this->getData('fileStage'));
159  } else {
160  $this->_submissionFiles = $submissionFileDao->getLatestRevisionsByAssocId(
161  $this->getAssocType(), $this->getAssocId(), $this->getData('submissionId'), $this->getData('fileStage')
162  );
163  }
164 
165  }
166  }
167 
169  }
170 
177  function getRevisionSubmissionFilesSelection($user, $uploadedFile = null) {
178  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
179  $allSubmissionFiles = $this->getSubmissionFiles();
180  $submissionFiles = array();
181  foreach ($allSubmissionFiles as $submissionFile) {
182  // The uploaded file must be excluded from the list of revisable files.
183  if ($uploadedFile && $uploadedFile->getFileId() == $submissionFile->getFileId()) continue;
184  if (
185  ($submissionFile->getFileStage() == SUBMISSION_FILE_REVIEW_ATTACHMENT || $submissionFile->getFileStage() == SUBMISSION_FILE_REVIEW_FILE) &&
186  $stageAssignmentDao->getBySubmissionAndRoleId($submissionFile->getSubmissionId(), ROLE_ID_AUTHOR, $this->getStageId(), $user->getId())
187  ) {
188  // Authors are not permitted to revise reviewer documents.
189  continue;
190  }
191  $submissionFiles[] = $submissionFile;
192  }
193  return $submissionFiles;
194  }
195 
196  //
197  // Implement template methods from Form
198  //
202  function readInputData() {
203  // Only Genre and revised file can be set in the form. All other
204  // information is generated on our side.
205  $this->readUserVars(array('revisedFileId'));
206  }
207 
211  function fetch($request, $template = null, $display = false) {
212  // Set the workflow stage.
213  $this->setData('stageId', $this->getStageId());
214 
215  // Set the review round id, if any.
216  $reviewRound = $this->getReviewRound();
217  if (is_a($reviewRound, 'ReviewRound')) {
218  $this->setData('reviewRoundId', $reviewRound->getId());
219  }
220 
221  // Retrieve the uploaded file (if any).
222  $uploadedFile = $this->getData('uploadedFile');
223 
224  $user = $request->getUser();
225 
226  // Initialize the list with files available for review.
227  $submissionFileOptions = array();
228  $currentSubmissionFileGenres = array();
229 
230  // Go through all files and build a list of files available for review.
231  $revisedFileId = $this->getRevisedFileId();
232  $foundRevisedFile = false;
233  $submissionFiles = $this->getRevisionSubmissionFilesSelection($user, $uploadedFile);
234 
235  foreach ((array) $submissionFiles as $submissionFile) {
236 
237  // Is this the revised file?
238  if ($revisedFileId && $revisedFileId == $submissionFile->getFileId()) {
239  // This is the revised submission file, so pass its data on to the form.
240  $this->setData('revisedFileName', $submissionFile->getOriginalFileName());
241  $this->setData('genreId', $submissionFile->getGenreId());
242  $foundRevisedFile = true;
243  }
244 
245  // Create an entry in the list of existing files which
246  // the user can select from in case he chooses to upload
247  // a revision.
248  $fileName = $submissionFile->getLocalizedName() != '' ? $submissionFile->getLocalizedName() : __('common.untitled');
249  if ($submissionFile->getRevision() > 1) $fileName .= ' (' . $submissionFile->getRevision() . ')';
250 
251  // If we are about to add a revision of a revision, remove the original one from the list of possible file choices.
252  if (array_key_exists($submissionFile->getSourceFileId(), $submissionFileOptions)) {
253  unset($submissionFileOptions[$submissionFile->getSourceFileId()]);
254  }
255 
256  $submissionFileOptions[$submissionFile->getFileId()] = $fileName;
257  $currentSubmissionFileGenres[$submissionFile->getFileId()] = $submissionFile->getGenreId();
258 
259  $lastSubmissionFile = $submissionFile;
260  }
261 
262  // If there is only one option for a file to review, and user must revise, do not show the selector.
263  if (count($submissionFileOptions) == 1 && $this->getData('revisionOnly')) {
264  // There was only one option, use the last added submission file
265  $this->setData('revisedFileId', $lastSubmissionFile->getFileId());
266  $this->setData('revisedFileName', $lastSubmissionFile->getOriginalFileName());
267  $this->setData('genreId', $lastSubmissionFile->getGenreId());
268  }
269 
270  // If this is not a "review only" form then add a default item.
271  if (count($submissionFileOptions) && !$this->getData('revisionOnly')) {
272  $submissionFileOptions = array('' => __('submission.upload.uploadNewFile')) + $submissionFileOptions;
273  }
274 
275  // Make sure that the revised file (if any) really was among
276  // the retrieved submission files in the current file stage.
277  if ($revisedFileId && !$foundRevisedFile) fatalError('Invalid revised file id!');
278 
279  // Set the review file candidate data in the template.
280  $this->setData('currentSubmissionFileGenres', $currentSubmissionFileGenres);
281  $this->setData('submissionFileOptions', $submissionFileOptions);
282 
283  // Show ensuring a blind review link.
284  $context = $request->getContext();
285  if ($context->getData('showEnsuringLink') && in_array($this->getStageId(), array(WORKFLOW_STAGE_ID_SUBMISSION, WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW))) {
286  import('lib.pkp.classes.linkAction.request.ConfirmationModal');
287  $ensuringLink = new LinkAction(
288  'addUser',
289  new ConfirmationModal(
290  __('review.blindPeerReview'),
291  __('review.ensuringBlindReview')),
292  __('review.ensuringBlindReview'));
293 
294  $templateMgr = TemplateManager::getManager($request);
295  $templateMgr->assign('ensuringLink', $ensuringLink);
296  }
297 
298  return parent::fetch($request, $template, $display);
299  }
300 }
301 
302 
PKPSubmissionFilesUploadBaseForm\$_stageId
$_stageId
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:26
PKPSubmissionFilesUploadBaseForm
Form for adding/editing a submission file.
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:20
PKPSubmissionFilesUploadBaseForm\fetch
fetch($request, $template=null, $display=false)
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:220
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPSubmissionFilesUploadBaseForm\getRevisionSubmissionFilesSelection
getRevisionSubmissionFilesSelection($user, $uploadedFile=null)
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:186
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
PKPSubmissionFilesUploadBaseForm\readInputData
readInputData()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:211
ConfirmationModal
Class defining a simple confirmation modal either with remote action or not.
Definition: ConfirmationModal.inc.php:18
PKPSubmissionFilesUploadBaseForm\__construct
__construct($request, $template, $submissionId, $stageId, $fileStage, $revisionOnly=false, $reviewRound=null, $revisedFileId=null, $assocType=null, $assocId=null)
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:51
PKPSubmissionFilesUploadBaseForm\getStageId
getStageId()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:101
PKPSubmissionFilesUploadBaseForm\getRevisedFileId
getRevisedFileId()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:117
PKPSubmissionFilesUploadBaseForm\getAssocType
getAssocType()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:125
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
Seboettg\Collection\count
count()
Definition: ArrayListTrait.php:253
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PKPSubmissionFilesUploadBaseForm\getReviewRound
getReviewRound()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:109
PKPSubmissionFilesUploadBaseForm\getSubmissionFiles
getSubmissionFiles()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:142
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
PKPSubmissionFilesUploadBaseForm\$_submissionFiles
$_submissionFiles
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:38
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
PKPSubmissionFilesUploadBaseForm\$_reviewRound
$_reviewRound
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:32
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
PKPSubmissionFilesUploadBaseForm\getAssocId
getAssocId()
Definition: PKPSubmissionFilesUploadBaseForm.inc.php:133