00001 <?php
00002
00019
00020
00021
00022 import('submission.common.Action');
00023
00024 class ProofreaderAction extends Action {
00025
00029 function selectProofreader($userId, $article) {
00030 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00031 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($article->getArticleId());
00032
00033 if (!HookRegistry::call('ProofreaderAction::selectProofreader', array(&$userId, &$article, &$proofAssignment))) {
00034 $proofAssignment->setProofreaderId($userId);
00035 $proofAssignmentDao->updateProofAssignment($proofAssignment);
00036
00037
00038 $user = &Request::getUser();
00039 $userDao = &DAORegistry::getDAO('UserDAO');
00040 $proofreader = &$userDao->getUser($userId);
00041 if (!isset($proofreader)) return;
00042 import('article.log.ArticleLog');
00043 import('article.log.ArticleEventLogEntry');
00044 ArticleLog::logEvent($article->getArticleId(), ARTICLE_LOG_PROOFREAD_ASSIGN, ARTICLE_LOG_TYPE_PROOFREAD, $user->getUserId(), 'log.proofread.assign', Array('assignerName' => $user->getFullName(), 'proofreaderName' => $proofreader->getFullName(), 'articleId' => $article->getArticleId()));
00045 }
00046 }
00047
00055 function proofreadEmail($articleId, $mailType, $actionPath = '') {
00056 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00057 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00058 $sectionEditorSubmission = &$sectionEditorSubmissionDao->getSectionEditorSubmission($articleId);
00059 $userDao = &DAORegistry::getDAO('UserDAO');
00060 $journal = &Request::getJournal();
00061 $user = &Request::getUser();
00062
00063 $ccs = array();
00064
00065 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($articleId);
00066 $useProofreaders = $journal->getSetting('useProofreaders');
00067
00068 import('mail.ArticleMailTemplate');
00069 $email = &new ArticleMailTemplate($sectionEditorSubmission, $mailType);
00070
00071 switch($mailType) {
00072 case 'PROOFREAD_AUTHOR_REQUEST':
00073 $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_AUTHOR;
00074 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00075 $setDateField = 'setDateAuthorNotified';
00076 $nullifyDateFields = array('setDateAuthorUnderway', 'setDateAuthorCompleted', 'setDateAuthorAcknowledged');
00077 $receiver = &$userDao->getUser($sectionEditorSubmission->getUserId());
00078 if (!isset($receiver)) return true;
00079 $receiverName = $receiver->getFullName();
00080 $receiverAddress = $receiver->getEmail();
00081 $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getArticleId());
00082 $addParamArray = array(
00083 'authorName' => $receiver->getFullName(),
00084 'authorUsername' => $receiver->getUsername(),
00085 'authorPassword' => $receiver->getPassword(),
00086 'editorialContactSignature' => $user->getContactSignature(),
00087 'submissionUrl' => Request::url(null, 'author', 'submission', $articleId)
00088 );
00089 break;
00090
00091 case 'PROOFREAD_AUTHOR_ACK':
00092 $eventType = ARTICLE_EMAIL_PROOFREAD_THANK_AUTHOR;
00093 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00094 $setDateField = 'setDateAuthorAcknowledged';
00095 $receiver = &$userDao->getUser($sectionEditorSubmission->getUserId());
00096 if (!isset($receiver)) return true;
00097 $receiverName = $receiver->getFullName();
00098 $receiverAddress = $receiver->getEmail();
00099 $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getArticleId());
00100 $addParamArray = array(
00101 'authorName' => $receiver->getFullName(),
00102 'editorialContactSignature' => $user->getContactSignature()
00103 );
00104 break;
00105
00106 case 'PROOFREAD_AUTHOR_COMPLETE':
00107 $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_AUTHOR_COMPLETE;
00108 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00109 $setDateField = 'setDateAuthorCompleted';
00110 $getDateField = 'getDateAuthorCompleted';
00111
00112 $editAssignments =& $sectionEditorSubmission->getEditAssignments();
00113
00114 if ($proofAssignment->getProofreaderId() != 0) {
00115 $setNextDateField = 'setDateProofreaderNotified';
00116
00117 $receiverName = $proofAssignment->getProofreaderFullName();
00118 $receiverAddress = $proofAssignment->getProofreaderEmail();
00119
00120 $editorAdded = false;
00121 foreach ($editAssignments as $editAssignment) {
00122 if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) {
00123 $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName();
00124 $editorAdded = true;
00125 }
00126 }
00127 if (!$editorAdded) $ccs[$journal->getSetting('contactEmail')] = $journal->getSetting('contactName');
00128 } else {
00129 $editorAdded = false;
00130 $assignmentIndex = 0;
00131 foreach ($editAssignments as $editAssignment) {
00132 if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) {
00133 if ($assignmentIndex++ == 0) {
00134 $receiverName = $editAssignment->getEditorFullName();
00135 $receiverAddress = $editAssignment->getEditorEmail();
00136 } else {
00137 $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName();
00138 }
00139 $editorAdded = true;
00140 }
00141 }
00142 if (!$editorAdded) {
00143 $receiverAddress = $journal->getSetting('contactEmail');
00144 $receiverName = $journal->getSetting('contactName');
00145 }
00146 }
00147
00148 $addParamArray = array(
00149 'editorialContactName' => $receiverName,
00150 'authorName' => $user->getFullName()
00151 );
00152 break;
00153
00154 case 'PROOFREAD_REQUEST':
00155 $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_PROOFREADER;
00156 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00157 $setDateField = 'setDateProofreaderNotified';
00158 $nullifyDateFields = array('setDateProofreaderUnderway', 'setDateProofreaderCompleted', 'setDateProofreaderAcknowledged');
00159
00160 $receiver = &$userDao->getUser($proofAssignment->getProofreaderId());
00161 if (!isset($receiver)) return true;
00162 $receiverName = $proofAssignment->getProofreaderFullName();
00163 $receiverAddress = $proofAssignment->getProofreaderEmail();
00164 $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getArticleId());
00165
00166 $addParamArray = array(
00167 'proofreaderName' => $receiverName,
00168 'proofreaderUsername' => $receiver->getUsername(),
00169 'proofreaderPassword' => $receiver->getPassword(),
00170 'editorialContactSignature' => $user->getContactSignature(),
00171 'submissionUrl' => Request::url(null, 'proofreader', 'submission', $articleId)
00172 );
00173 break;
00174
00175 case 'PROOFREAD_ACK':
00176 $eventType = ARTICLE_EMAIL_PROOFREAD_THANK_PROOFREADER;
00177 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00178 $setDateField = 'setDateProofreaderAcknowledged';
00179
00180 $receiver = &$userDao->getUser($proofAssignment->getProofreaderId());
00181 if (!isset($receiver)) return true;
00182 $receiverName = $proofAssignment->getProofreaderFullName();
00183 $receiverAddress = $proofAssignment->getProofreaderEmail();
00184 $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getArticleId());
00185
00186 $addParamArray = array(
00187 'proofreaderName' => $receiverName,
00188 'editorialContactSignature' => $user->getContactSignature()
00189 );
00190 break;
00191
00192 case 'PROOFREAD_COMPLETE':
00193 $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_PROOFREADER_COMPLETE;
00194 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00195 $setDateField = 'setDateProofreaderCompleted';
00196 $getDateField = 'getDateProofreaderCompleted';
00197 $setNextDateField = 'setDateLayoutEditorNotified';
00198 $editAssignments =& $sectionEditorSubmission->getEditAssignments();
00199 $layoutAssignment =& $sectionEditorSubmission->getLayoutAssignment();
00200
00201 $receiver = &$userDao->getUser($layoutAssignment->getEditorId());
00202
00203 $editorAdded = false;
00204 foreach ($editAssignments as $editAssignment) {
00205 if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) {
00206 $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName();
00207 $editorAdded = true;
00208 }
00209 }
00210 if (isset($receiver)) {
00211 $receiverName = $receiver->getFullName();
00212 $receiverAddress = $receiver->getEmail();
00213 } else {
00214 $receiverAddress = $journal->getSetting('contactEmail');
00215 $receiverName = $journal->getSetting('contactName');
00216 }
00217 if (!$editorAdded) {
00218 $ccs[$journal->getSetting('contactEmail')] = $journal->getSetting('contactName');
00219 }
00220
00221 $addParamArray = array(
00222 'editorialContactName' => $receiverName,
00223 'proofreaderName' => $user->getFullName()
00224 );
00225 break;
00226
00227 case 'PROOFREAD_LAYOUT_REQUEST':
00228 $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_LAYOUTEDITOR;
00229 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00230 $setDateField = 'setDateLayoutEditorNotified';
00231 $nullifyDateFields = array('setDateLayoutEditorUnderway', 'setDateLayoutEditorCompleted', 'setDateLayoutEditorAcknowledged');
00232 $layoutAssignment =& $sectionEditorSubmission->getLayoutAssignment();
00233
00234 $receiver = &$userDao->getUser($layoutAssignment->getEditorId());
00235 if (!isset($receiver)) return true;
00236 $receiverName = $receiver->getFullName();
00237 $receiverAddress = $receiver->getEmail();
00238 $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getArticleId());
00239
00240 $addParamArray = array(
00241 'layoutEditorName' => $receiverName,
00242 'layoutEditorUsername' => $receiver->getUsername(),
00243 'layoutEditorPassword' => $receiver->getPassword(),
00244 'editorialContactSignature' => $user->getContactSignature(),
00245 'submissionUrl' => Request::url(null, 'proofreader', 'submission', $articleId)
00246 );
00247
00248 if (!$actionPath) {
00249
00250 $proofAssignment->setDateLayoutEditorUnderway(null);
00251 $proofAssignment->setDateLayoutEditorCompleted(null);
00252 $proofAssignment->setDateLayoutEditorAcknowledged(null);
00253 }
00254 break;
00255
00256 case 'PROOFREAD_LAYOUT_ACK':
00257 $eventType = ARTICLE_EMAIL_PROOFREAD_THANK_LAYOUTEDITOR;
00258 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00259 $setDateField = 'setDateLayoutEditorAcknowledged';
00260 $layoutAssignment =& $sectionEditorSubmission->getLayoutAssignment();
00261
00262 $receiverName = $layoutAssignment->getEditorFullName();
00263 $receiverAddress = $layoutAssignment->getEditorEmail();
00264 $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getArticleId());
00265
00266 $addParamArray = array(
00267 'layoutEditorName' => $receiverName,
00268 'editorialContactSignature' => $user->getContactSignature()
00269 );
00270 break;
00271
00272 case 'PROOFREAD_LAYOUT_COMPLETE':
00273 $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_LAYOUTEDITOR_COMPLETE;
00274 $assocType = ARTICLE_EMAIL_TYPE_PROOFREAD;
00275 $setDateField = 'setDateLayoutEditorCompleted';
00276 $getDateField = 'getDateLayoutEditorCompleted';
00277
00278 $editAssignments =& $sectionEditorSubmission->getEditAssignments();
00279 $assignmentIndex = 0;
00280 $editorAdded = false;
00281 foreach ($editAssignments as $editAssignment) {
00282 if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) {
00283 if ($assignmentIndex++ == 0) {
00284 $receiverName = $editAssignment->getEditorFullName();
00285 $receiverAddress = $editAssignment->getEditorEmail();
00286 } else {
00287 $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName();
00288 }
00289 $editorAdded = true;
00290 }
00291 }
00292 if (!$editorAdded) {
00293 $receiverAddress = $journal->getSetting('contactEmail');
00294 $receiverName = $journal->getSetting('contactName');
00295 }
00296
00297 $addParamArray = array(
00298 'editorialContactName' => $receiverName,
00299 'layoutEditorName' => $user->getFullName()
00300 );
00301 break;
00302
00303 default:
00304 return true;
00305 }
00306
00307 if (isset($getDateField)) {
00308 $date = $proofAssignment->$getDateField();
00309 if (isset($date)) {
00310 Request::redirect(null, null, 'submission', $articleId);
00311 }
00312 }
00313
00314 if ($email->isEnabled() && ($actionPath || $email->hasErrors())) {
00315 if (!Request::getUserVar('continued')) {
00316 $email->addRecipient($receiverAddress, $receiverName);
00317 if (isset($ccs)) foreach ($ccs as $address => $name) {
00318 $email->addCc($address, $name);
00319 }
00320
00321 $paramArray = array();
00322
00323 if (isset($addParamArray)) {
00324 $paramArray += $addParamArray;
00325 }
00326 $email->assignParams($paramArray);
00327 }
00328 $email->displayEditForm($actionPath, array('articleId' => $articleId));
00329 return false;
00330 } else {
00331 HookRegistry::call('ProofreaderAction::proofreadEmail', array(&$proofAssignment, &$email, $mailType));
00332 if ($email->isEnabled()) {
00333 $email->setAssoc($eventType, $assocType, $articleId);
00334 $email->send();
00335 }
00336
00337 $proofAssignment->$setDateField(Core::getCurrentDate());
00338 if (isset($setNextDateField)) {
00339 $proofAssignment->$setNextDateField(Core::getCurrentDate());
00340 }
00341 if (isset($nullifyDateFields)) foreach ($nullifyDateFields as $fieldSetter) {
00342 $proofAssignment->$fieldSetter(null);
00343 }
00344
00345 $proofAssignmentDao->updateProofAssignment($proofAssignment);
00346 return true;
00347 }
00348 }
00349
00354 function authorProofreadingUnderway(&$submission) {
00355 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00356 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($submission->getArticleId());
00357
00358 if (!$proofAssignment->getDateAuthorUnderway() && $proofAssignment->getDateAuthorNotified() && !HookRegistry::call('ProofreaderAction::authorProofreadingUnderway', array(&$submission, &$proofAssignment))) {
00359 $dateUnderway = Core::getCurrentDate();
00360 $proofAssignment->setDateAuthorUnderway($dateUnderway);
00361 $authorProofAssignment = &$submission->getProofAssignment();
00362 $authorProofAssignment->setDateAuthorUnderway($dateUnderway);
00363 }
00364
00365 $proofAssignmentDao->updateProofAssignment($proofAssignment);
00366 }
00367
00372 function proofreaderProofreadingUnderway(&$submission) {
00373 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00374 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($submission->getArticleId());
00375
00376 if (!$proofAssignment->getDateProofreaderUnderway() && $proofAssignment->getDateProofreaderNotified() && !HookRegistry::call('ProofreaderAction::proofreaderProofreadingUnderway', array(&$submission, &$proofAssignment))) {
00377 $dateUnderway = Core::getCurrentDate();
00378 $proofAssignment->setDateProofreaderUnderway($dateUnderway);
00379 $proofreaderProofAssignment = &$submission->getProofAssignment();
00380 $proofreaderProofAssignment->setDateProofreaderUnderway($dateUnderway);
00381 }
00382
00383 $proofAssignmentDao->updateProofAssignment($proofAssignment);
00384 }
00385
00390 function layoutEditorProofreadingUnderway(&$submission) {
00391 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00392 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($submission->getArticleId());
00393
00394 if (!$proofAssignment->getDateLayoutEditorUnderway() && $proofAssignment->getDateLayoutEditorNotified() && !HookRegistry::call('ProofreaderAction::layoutEditorProofreadingUnderway', array(&$submission, &$proofAssignment))) {
00395 $dateUnderway = Core::getCurrentDate();
00396 $proofAssignment->setDateLayoutEditorUnderway($dateUnderway);
00397 $layoutEditorAssignment = &$submission->getProofAssignment();
00398 $layoutEditorAssignment->setDateLayoutEditorUnderway($dateUnderway);
00399 }
00400
00401 $proofAssignmentDao->updateProofAssignment($proofAssignment);
00402 }
00403
00404
00405
00406
00407
00414 function downloadProofreaderFile($submission, $fileId, $revision = null) {
00415 $canDownload = false;
00416
00417
00418
00419
00420
00421
00422 foreach ($submission->getSuppFiles() as $suppFile) {
00423 if ($suppFile->getFileId() == $fileId) {
00424 $canDownload = true;
00425 }
00426 }
00427
00428
00429 foreach ($submission->getGalleys() as $galleyFile) {
00430 if ($galleyFile->getFileId() == $fileId) {
00431 $canDownload = true;
00432 }
00433 }
00434
00435 $result = false;
00436 if (!HookRegistry::call('ProofreaderAction::downloadProofreaderFile', array(&$submission, &$fileId, &$revision, &$canDownload, &$result))) {
00437 if ($canDownload) {
00438 return Action::downloadFile($submission->getArticleId(), $fileId, $revision);
00439 } else {
00440 return false;
00441 }
00442 }
00443 return $result;
00444 }
00445
00450 function viewProofreadComments($article) {
00451 if (!HookRegistry::call('ProofreaderAction::viewProofreadComments', array(&$article))) {
00452 import("submission.form.comment.ProofreadCommentForm");
00453
00454 $commentForm = &new ProofreadCommentForm($article, ROLE_ID_PROOFREADER);
00455 $commentForm->initData();
00456 $commentForm->display();
00457 }
00458 }
00459
00465 function postProofreadComment($article, $emailComment) {
00466 if (!HookRegistry::call('ProofreaderAction::postProofreadComment', array(&$article, &$emailComment))) {
00467 import("submission.form.comment.ProofreadCommentForm");
00468
00469 $commentForm = &new ProofreadCommentForm($article, ROLE_ID_PROOFREADER);
00470 $commentForm->readInputData();
00471
00472 if ($commentForm->validate()) {
00473 $commentForm->execute();
00474
00475 if ($emailComment) {
00476 $commentForm->email();
00477 }
00478
00479 } else {
00480 $commentForm->display();
00481 return false;
00482 }
00483 return true;
00484 }
00485 }
00486
00491 function viewLayoutComments($article) {
00492 if (!HookRegistry::call('ProofreaderAction::viewLayoutComments', array(&$article))) {
00493 import("submission.form.comment.LayoutCommentForm");
00494
00495 $commentForm = &new LayoutCommentForm($article, ROLE_ID_PROOFREADER);
00496 $commentForm->initData();
00497 $commentForm->display();
00498 }
00499 }
00500
00506 function postLayoutComment($article, $emailComment) {
00507 if (!HookRegistry::call('ProofreaderAction::postLayoutComment', array(&$article, &$emailComment))) {
00508 import("submission.form.comment.LayoutCommentForm");
00509
00510 $commentForm = &new LayoutCommentForm($article, ROLE_ID_PROOFREADER);
00511 $commentForm->readInputData();
00512
00513 if ($commentForm->validate()) {
00514 $commentForm->execute();
00515
00516 if ($emailComment) {
00517 $commentForm->email();
00518 }
00519
00520 } else {
00521 $commentForm->display();
00522 return false;
00523 }
00524 return true;
00525 }
00526 }
00527
00528 }
00529
00530 ?>