00001 <?php
00002
00015
00016
00017
00018 import('submission.common.Action');
00019
00020 class AuthorAction extends Action {
00021
00025 function AuthorAction() {
00026 parent::Action();
00027 }
00028
00038 function designateReviewVersion($authorSubmission, $designate = false) {
00039 import('file.ArticleFileManager');
00040 $articleFileManager = &new ArticleFileManager($authorSubmission->getArticleId());
00041 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00042
00043 if ($designate && !HookRegistry::call('AuthorAction::designateReviewVersion', array(&$authorSubmission))) {
00044 $submissionFile =& $authorSubmission->getSubmissionFile();
00045 if ($submissionFile) {
00046 $reviewFileId = $articleFileManager->copyToReviewFile($submissionFile->getFileId());
00047
00048 $authorSubmission->setReviewFileId($reviewFileId);
00049
00050 $authorSubmissionDao->updateAuthorSubmission($authorSubmission);
00051
00052 $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
00053 $sectionEditorSubmissionDao->createReviewRound($authorSubmission->getArticleId(), 1, 1);
00054 }
00055 }
00056 }
00057
00064 function deleteArticleFile($article, $fileId, $revisionId) {
00065 import('file.ArticleFileManager');
00066
00067 $articleFileManager = &new ArticleFileManager($article->getArticleId());
00068 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
00069 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00070
00071 $articleFile = &$articleFileDao->getArticleFile($fileId, $revisionId, $article->getArticleId());
00072 $authorSubmission = $authorSubmissionDao->getAuthorSubmission($article->getArticleId());
00073 $authorRevisions = $authorSubmission->getAuthorFileRevisions();
00074
00075
00076 if (isset($articleFile)) {
00077 HookRegistry::call('AuthorAction::deleteArticleFile', array(&$articleFile, &$authorRevisions));
00078 foreach ($authorRevisions as $round) {
00079 foreach ($round as $revision) {
00080 if ($revision->getFileId() == $articleFile->getFileId() &&
00081 $revision->getRevision() == $articleFile->getRevision()) {
00082 $articleFileManager->deleteFile($articleFile->getFileId(), $articleFile->getRevision());
00083 }
00084 }
00085 }
00086 }
00087 }
00088
00093 function uploadRevisedVersion($authorSubmission) {
00094 import("file.ArticleFileManager");
00095 $articleFileManager = &new ArticleFileManager($authorSubmission->getArticleId());
00096 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00097
00098 $fileName = 'upload';
00099 if ($articleFileManager->uploadedFileExists($fileName)) {
00100 HookRegistry::call('AuthorAction::uploadRevisedVersion', array(&$authorSubmission));
00101 if ($authorSubmission->getRevisedFileId() != null) {
00102 $fileId = $articleFileManager->uploadEditorDecisionFile($fileName, $authorSubmission->getRevisedFileId());
00103 } else {
00104 $fileId = $articleFileManager->uploadEditorDecisionFile($fileName);
00105 }
00106 }
00107
00108 if (isset($fileId) && $fileId != 0) {
00109 $authorSubmission->setRevisedFileId($fileId);
00110
00111 $authorSubmissionDao->updateAuthorSubmission($authorSubmission);
00112
00113
00114 $user = &Request::getUser();
00115 import('article.log.ArticleLog');
00116 import('article.log.ArticleEventLogEntry');
00117 ArticleLog::logEvent($authorSubmission->getArticleId(), ARTICLE_LOG_AUTHOR_REVISION, ARTICLE_LOG_TYPE_AUTHOR, $user->getUserId(), 'log.author.documentRevised', array('authorName' => $user->getFullName(), 'fileId' => $fileId, 'articleId' => $authorSubmission->getArticleId()));
00118 }
00119 }
00120
00125 function completeAuthorCopyedit($authorSubmission, $send = false) {
00126 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00127 $userDao = &DAORegistry::getDAO('UserDAO');
00128 $journal = &Request::getJournal();
00129
00130 if ($authorSubmission->getCopyeditorDateAuthorCompleted() != null) {
00131 return true;
00132 }
00133
00134 $user = &Request::getUser();
00135 import('mail.ArticleMailTemplate');
00136 $email = &new ArticleMailTemplate($authorSubmission, 'COPYEDIT_AUTHOR_COMPLETE');
00137
00138 $editAssignments = $authorSubmission->getEditAssignments();
00139
00140 $copyeditor =& $authorSubmission->getCopyeditor();
00141
00142 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00143 HookRegistry::call('AuthorAction::completeAuthorCopyedit', array(&$authorSubmission, &$email));
00144 if ($email->isEnabled()) {
00145 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_AUTHOR_COMPLETE, ARTICLE_EMAIL_TYPE_COPYEDIT, $authorSubmission->getArticleId());
00146 $email->send();
00147 }
00148
00149 $authorSubmission->setCopyeditorDateAuthorCompleted(Core::getCurrentDate());
00150 $authorSubmission->setCopyeditorDateFinalNotified(Core::getCurrentDate());
00151 $authorSubmissionDao->updateAuthorSubmission($authorSubmission);
00152
00153
00154 import('article.log.ArticleLog');
00155 import('article.log.ArticleEventLogEntry');
00156 ArticleLog::logEvent($authorSubmission->getArticleId(), ARTICLE_LOG_COPYEDIT_REVISION, ARTICLE_LOG_TYPE_AUTHOR, $user->getUserId(), 'log.copyedit.authorFile');
00157
00158 return true;
00159
00160 } else {
00161 if (!Request::getUserVar('continued')) {
00162 if (isset($copyeditor)) {
00163 $email->addRecipient($copyeditor->getEmail(), $copyeditor->getFullName());
00164 $assignedSectionEditors = $email->ccAssignedEditingSectionEditors($authorSubmission->getArticleId());
00165 $assignedEditors = $email->ccAssignedEditors($authorSubmission->getArticleId());
00166 if (empty($assignedSectionEditors) && empty($assignedEditors)) {
00167 $email->addCc($journal->getSetting('contactEmail'), $journal->getSetting('contactName'));
00168 $editorName = $journal->getSetting('contactName');
00169 } else {
00170 $editor = array_shift($assignedSectionEditors);
00171 if (!$editor) $editor = array_shift($assignedEditors);
00172 $editorName = $editor->getEditorFullName();
00173 }
00174 } else {
00175 $assignedSectionEditors = $email->toAssignedEditingSectionEditors($authorSubmission->getArticleId());
00176 $assignedEditors = $email->ccAssignedEditors($authorSubmission->getArticleId());
00177 if (empty($assignedSectionEditors) && empty($assignedEditors)) {
00178 $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName'));
00179 $editorName = $journal->getSetting('contactName');
00180 } else {
00181 $editor = array_shift($assignedSectionEditors);
00182 if (!$editor) $editor = array_shift($assignedEditors);
00183 $editorName = $editor->getEditorFullName();
00184 }
00185 }
00186
00187 $paramArray = array(
00188 'editorialContactName' => isset($copyeditor)?$copyeditor->getFullName():$editorName,
00189 'authorName' => $user->getFullName()
00190 );
00191 $email->assignParams($paramArray);
00192 }
00193 $email->displayEditForm(Request::url(null, 'author', 'completeAuthorCopyedit', 'send'), array('articleId' => $authorSubmission->getArticleId()));
00194
00195 return false;
00196 }
00197 }
00198
00202 function copyeditUnderway($authorSubmission) {
00203 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00204
00205 if ($authorSubmission->getCopyeditorDateAuthorNotified() != null && $authorSubmission->getCopyeditorDateAuthorUnderway() == null) {
00206 HookRegistry::call('AuthorAction::copyeditUnderway', array(&$authorSubmission));
00207 $authorSubmission->setCopyeditorDateAuthorUnderway(Core::getCurrentDate());
00208 $authorSubmissionDao->updateAuthorSubmission($authorSubmission);
00209 }
00210 }
00211
00217 function uploadCopyeditVersion($authorSubmission, $copyeditStage) {
00218 import("file.ArticleFileManager");
00219 $articleFileManager = &new ArticleFileManager($authorSubmission->getArticleId());
00220 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00221 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
00222
00223
00224
00225 if (!$authorSubmission->getCopyeditorDateAuthorNotified() || $authorSubmission->getCopyeditorDateAuthorCompleted()) return;
00226
00227 $fileName = 'upload';
00228 if ($articleFileManager->uploadedFileExists($fileName)) {
00229 HookRegistry::call('AuthorAction::uploadCopyeditVersion', array(&$authorSubmission, &$copyeditStage));
00230 if ($authorSubmission->getCopyeditFileId() != null) {
00231 $fileId = $articleFileManager->uploadCopyeditFile($fileName, $authorSubmission->getCopyeditFileId());
00232 } else {
00233 $fileId = $articleFileManager->uploadCopyeditFile($fileName);
00234 }
00235 }
00236
00237 $authorSubmission->setCopyeditFileId($fileId);
00238
00239 if ($copyeditStage == 'author') {
00240 $authorSubmission->setCopyeditorEditorAuthorRevision($articleFileDao->getRevisionNumber($fileId));
00241 }
00242
00243 $authorSubmissionDao->updateAuthorSubmission($authorSubmission);
00244 }
00245
00246
00247
00248
00249
00254 function viewLayoutComments($article) {
00255 if (!HookRegistry::call('AuthorAction::viewLayoutComments', array(&$article))) {
00256 import("submission.form.comment.LayoutCommentForm");
00257 $commentForm = &new LayoutCommentForm($article, ROLE_ID_EDITOR);
00258 $commentForm->initData();
00259 $commentForm->display();
00260 }
00261 }
00262
00268 function postLayoutComment($article, $emailComment) {
00269 if (!HookRegistry::call('AuthorAction::postLayoutComment', array(&$article, &$emailComment))) {
00270 import("submission.form.comment.LayoutCommentForm");
00271
00272 $commentForm = &new LayoutCommentForm($article, ROLE_ID_AUTHOR);
00273 $commentForm->readInputData();
00274
00275 if ($commentForm->validate()) {
00276 $commentForm->execute();
00277
00278 if ($emailComment) {
00279 $commentForm->email();
00280 }
00281
00282 } else {
00283 $commentForm->display();
00284 return false;
00285 }
00286 return true;
00287 }
00288 }
00289
00294 function viewEditorDecisionComments($article) {
00295 if (!HookRegistry::call('AuthorAction::viewEditorDecisionComments', array(&$article))) {
00296 import("submission.form.comment.EditorDecisionCommentForm");
00297
00298 $commentForm = &new EditorDecisionCommentForm($article, ROLE_ID_AUTHOR);
00299 $commentForm->initData();
00300 $commentForm->display();
00301 }
00302 }
00303
00309 function emailEditorDecisionComment($authorSubmission, $send) {
00310 $userDao = &DAORegistry::getDAO('UserDAO');
00311 $journal = &Request::getJournal();
00312
00313 $user = &Request::getUser();
00314 import('mail.ArticleMailTemplate');
00315 $email = &new ArticleMailTemplate($authorSubmission);
00316
00317 $editAssignments = $authorSubmission->getEditAssignments();
00318 $editors = array();
00319 foreach ($editAssignments as $editAssignment) {
00320 array_push($editors, $userDao->getUser($editAssignment->getEditorId()));
00321 }
00322
00323 if ($send && !$email->hasErrors()) {
00324 HookRegistry::call('AuthorAction::emailEditorDecisionComment', array(&$authorSubmission, &$email));
00325 $email->send();
00326
00327 $articleCommentDao =& DAORegistry::getDAO('ArticleCommentDAO');
00328 $articleComment =& new ArticleComment();
00329 $articleComment->setCommentType(COMMENT_TYPE_EDITOR_DECISION);
00330 $articleComment->setRoleId(ROLE_ID_AUTHOR);
00331 $articleComment->setArticleId($authorSubmission->getArticleId());
00332 $articleComment->setAuthorId($authorSubmission->getUserId());
00333 $articleComment->setCommentTitle($email->getSubject());
00334 $articleComment->setComments($email->getBody());
00335 $articleComment->setDatePosted(Core::getCurrentDate());
00336 $articleComment->setViewable(true);
00337 $articleComment->setAssocId($authorSubmission->getArticleId());
00338 $articleCommentDao->insertArticleComment($articleComment);
00339
00340 return true;
00341 } else {
00342 if (!Request::getUserVar('continued')) {
00343 $email->setSubject($authorSubmission->getArticleTitle());
00344 if (!empty($editors)) {
00345 foreach ($editors as $editor) {
00346 $email->addRecipient($editor->getEmail(), $editor->getFullName());
00347 }
00348 } else {
00349 $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName'));
00350 }
00351 }
00352
00353 $email->displayEditForm(Request::url(null, null, 'emailEditorDecisionComment', 'send'), array('articleId' => $authorSubmission->getArticleId()), 'submission/comment/editorDecisionEmail.tpl');
00354
00355 return false;
00356 }
00357 }
00358
00363 function viewCopyeditComments($article) {
00364 if (!HookRegistry::call('AuthorAction::viewCopyeditComments', array(&$article))) {
00365 import("submission.form.comment.CopyeditCommentForm");
00366
00367 $commentForm = &new CopyeditCommentForm($article, ROLE_ID_AUTHOR);
00368 $commentForm->initData();
00369 $commentForm->display();
00370 }
00371 }
00372
00377 function postCopyeditComment($article, $emailComment) {
00378 if (!HookRegistry::call('AuthorAction::postCopyeditComment', array(&$article, &$emailComment))) {
00379 import("submission.form.comment.CopyeditCommentForm");
00380
00381 $commentForm = &new CopyeditCommentForm($article, ROLE_ID_AUTHOR);
00382 $commentForm->readInputData();
00383
00384 if ($commentForm->validate()) {
00385 $commentForm->execute();
00386
00387 if ($emailComment) {
00388 $commentForm->email();
00389 }
00390
00391 } else {
00392 $commentForm->display();
00393 return false;
00394 }
00395 return true;
00396 }
00397 }
00398
00403 function viewProofreadComments($article) {
00404 if (!HookRegistry::call('AuthorAction::viewProofreadComments', array(&$article))) {
00405 import("submission.form.comment.ProofreadCommentForm");
00406
00407 $commentForm = &new ProofreadCommentForm($article, ROLE_ID_AUTHOR);
00408 $commentForm->initData();
00409 $commentForm->display();
00410 }
00411 }
00412
00418 function postProofreadComment($article, $emailComment) {
00419 if (!HookRegistry::call('AuthorAction::postProofreadComment', array(&$article, &$emailComment))) {
00420 import("submission.form.comment.ProofreadCommentForm");
00421
00422 $commentForm = &new ProofreadCommentForm($article, ROLE_ID_AUTHOR);
00423 $commentForm->readInputData();
00424
00425 if ($commentForm->validate()) {
00426 $commentForm->execute();
00427
00428 if ($emailComment) {
00429 $commentForm->email();
00430 }
00431
00432 } else {
00433 $commentForm->display();
00434 return false;
00435 }
00436 return true;
00437 }
00438 }
00439
00440
00441
00442
00443
00452 function downloadAuthorFile($article, $fileId, $revision = null) {
00453 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00454
00455 $submission = &$authorSubmissionDao->getAuthorSubmission($article->getArticleId());
00456 $layoutAssignment = &$submission->getLayoutAssignment();
00457
00458 $canDownload = false;
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472 if ($submission->getSubmissionFileId() == $fileId) {
00473 $canDownload = true;
00474 } else if ($submission->getCopyeditFileId() == $fileId) {
00475 if ($revision != null) {
00476 $copyAssignmentDao = &DAORegistry::getDAO('CopyAssignmentDAO');
00477 $copyAssignment = &$copyAssignmentDao->getCopyAssignmentByArticleId($article->getArticleId());
00478 if ($copyAssignment && $copyAssignment->getInitialRevision()==$revision && $copyAssignment->getDateCompleted()!=null) $canDownload = true;
00479 else if ($copyAssignment && $copyAssignment->getFinalRevision()==$revision && $copyAssignment->getDateFinalCompleted()!=null) $canDownload = true;
00480 else if ($copyAssignment && $copyAssignment->getEditorAuthorRevision()==$revision) $canDownload = true;
00481 } else {
00482 $canDownload = false;
00483 }
00484 } else if ($submission->getRevisedFileId() == $fileId) {
00485 $canDownload = true;
00486 } else if ($layoutAssignment->getLayoutFileId() == $fileId) {
00487 $canDownload = true;
00488 } else {
00489
00490 foreach ($submission->getReviewAssignments() as $roundReviewAssignments) {
00491 foreach ($roundReviewAssignments as $reviewAssignment) {
00492 if ($reviewAssignment->getReviewerFileId() == $fileId) {
00493 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
00494
00495 $articleFile = &$articleFileDao->getArticleFile($fileId, $revision);
00496
00497 if ($articleFile != null && $articleFile->getViewable()) {
00498 $canDownload = true;
00499 }
00500 }
00501 }
00502 }
00503
00504
00505 foreach ($submission->getSuppFiles() as $suppFile) {
00506 if ($suppFile->getFileId() == $fileId) {
00507 $canDownload = true;
00508 }
00509 }
00510
00511
00512 foreach ($submission->getGalleys() as $galleyFile) {
00513 if ($galleyFile->getFileId() == $fileId) {
00514 $canDownload = true;
00515 }
00516 }
00517
00518
00519 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00520 $reviewFilesByRound =& $reviewAssignmentDao->getReviewFilesByRound($article->getArticleId());
00521 $reviewFile = @$reviewFilesByRound[$article->getCurrentRound()];
00522 if ($reviewFile && $fileId == $reviewFile->getFileId()) {
00523 $canDownload = true;
00524 }
00525
00526
00527 $editorFiles = $submission->getEditorFileRevisions($article->getCurrentRound());
00528 if (is_array($editorFiles)) foreach ($editorFiles as $editorFile) {
00529 if ($editorFile->getFileId() == $fileId) {
00530 $canDownload = true;
00531 }
00532 }
00533 }
00534
00535 $result = false;
00536 if (!HookRegistry::call('AuthorAction::downloadAuthorFile', array(&$article, &$fileId, &$revision, &$canDownload, &$result))) {
00537 if ($canDownload) {
00538 return Action::downloadFile($article->getArticleId(), $fileId, $revision);
00539 } else {
00540 return false;
00541 }
00542 }
00543 return $result;
00544 }
00545 }
00546
00547 ?>