Skip to content

Commit

Permalink
Share reviewer attachment files with author when attached to email no…
Browse files Browse the repository at this point in the history
…tification
  • Loading branch information
NateWr committed Dec 7, 2021
1 parent e3cd7aa commit 24fdcce
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 3 deletions.
4 changes: 3 additions & 1 deletion classes/decision/types/Accept.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,14 @@ public function callback(Decision $decision, Submission $submission, User $edito
break;
case $this->ACTION_NOTIFY_AUTHORS:
$reviewAssignments = $this->getCompletedReviewAssignments($submission->getId(), $decision->getData('reviewRoundId'));
$emailData = $this->getEmailDataFromAction($action);
$this->sendAuthorEmail(
new DecisionAcceptNotifyAuthor($context, $submission, $decision, $reviewAssignments),
$this->getEmailDataFromAction($action),
$emailData,
$editor,
$submission
);
$this->shareReviewAttachmentFiles($emailData->attachments, $submission, $decision->getData('reviewRoundId'));
break;
case $this->ACTION_NOTIFY_REVIEWERS:
$this->sendReviewersEmail(
Expand Down
4 changes: 3 additions & 1 deletion classes/decision/types/Decline.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,14 @@ public function callback(Decision $decision, Submission $submission, User $edito
switch ($action['id']) {
case $this->ACTION_NOTIFY_AUTHORS:
$reviewAssignments = $this->getCompletedReviewAssignments($submission->getId(), $decision->getData('reviewRoundId'));
$emailData = $this->getEmailDataFromAction($action);
$this->sendAuthorEmail(
new DecisionDeclineNotifyAuthor($context, $submission, $decision, $reviewAssignments),
$this->getEmailDataFromAction($action),
$emailData,
$editor,
$submission
);
$this->shareReviewAttachmentFiles($emailData->attachments, $submission, $decision->getData('reviewRoundId'));
break;
case $this->ACTION_NOTIFY_REVIEWERS:
$this->sendReviewersEmail(
Expand Down
4 changes: 3 additions & 1 deletion classes/decision/types/RequestRevisions.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,14 @@ public function callback(Decision $decision, Submission $submission, User $edito
switch ($action['id']) {
case $this->ACTION_NOTIFY_AUTHORS:
$reviewAssignments = $this->getCompletedReviewAssignments($submission->getId(), $decision->getData('reviewRoundId'));
$emailData = $this->getEmailDataFromAction($action);
$this->sendAuthorEmail(
new DecisionRequestRevisionsNotifyAuthor($context, $submission, $decision, $reviewAssignments),
$this->getEmailDataFromAction($action),
$emailData,
$editor,
$submission
);
$this->shareReviewAttachmentFiles($emailData->attachments, $submission, $decision->getData('reviewRoundId'));
break;
case $this->ACTION_NOTIFY_REVIEWERS:
$this->sendReviewersEmail(
Expand Down
2 changes: 2 additions & 0 deletions classes/decision/types/Resubmit.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,14 @@ public function callback(Decision $decision, Submission $submission, User $edito
switch ($action['id']) {
case $this->ACTION_NOTIFY_AUTHORS:
$reviewAssignments = $this->getCompletedReviewAssignments($submission->getId(), $decision->getData('reviewRoundId'));
$emailData = $this->getEmailDataFromAction($action);
$this->sendAuthorEmail(
new DecisionResubmitNotifyAuthor($context, $submission, $decision, $reviewAssignments),
$this->getEmailDataFromAction($action),
$editor,
$submission
);
$this->shareReviewAttachmentFiles($emailData->attachments, $submission, $decision->getData('reviewRoundId'));
break;
case $this->ACTION_NOTIFY_REVIEWERS:
$this->sendReviewersEmail(
Expand Down
50 changes: 50 additions & 0 deletions classes/decision/types/traits/NotifyAuthors.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

namespace PKP\decision\types\traits;

use APP\core\Application;
use APP\core\Services;
use APP\facades\Repo;
use APP\submission\Submission;
use Illuminate\Support\Facades\Mail;
Expand All @@ -22,12 +24,16 @@
use PKP\log\SubmissionEmailLogEntry;
use PKP\mail\EmailData;
use PKP\mail\Mailable;
use PKP\submission\SubmissionFile;
use PKP\user\User;

trait NotifyAuthors
{
protected string $ACTION_NOTIFY_AUTHORS = 'notifyAuthors';

/** @copydoc Type::getStageId() */
abstract public function getStageId(): int;

/** @copydoc Type::addEmailDataToMailable() */
abstract protected function addEmailDataToMailable(Mailable $mailable, User $user, EmailData $email): Mailable;

Expand Down Expand Up @@ -69,4 +75,48 @@ protected function sendAuthorEmail(Mailable $mailable, EmailData $email, User $e
$editor
);
}

/**
* Share reviewer file attachments with author
*
* This method looks in the email attachments for any files in the
* SubmissionFile::SUBMISSION_FILE_REVIEW_ATTACHMENT stage and sets
* their viewable flag to true. This flag makes the file visible to
* the author from the author submission dashboard.
*/
protected function shareReviewAttachmentFiles(array $attachments, Submission $submission, int $reviewRoundId)
{
if (!in_array($this->getStageId(), [WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW])) {
return;
}

$submissionFileIds = [];
foreach ($attachments as $attachment) {
if (!isset($attachment['submissionFileId'])) {
continue;
}
$submissionFileIds[] = (int) $attachment['submissionFileId'];
}

if (empty($submissionFileIds)) {
return;
}

$reviewAttachmentIds = Services::get('submissionFile')->getIds([
'submissionIds' => [$submission->getId()],
'reviewRoundIds' => [$reviewRoundId],
'fileStages' => [SubmissionFile::SUBMISSION_FILE_REVIEW_ATTACHMENT],
]);

$sharedFileIds = array_intersect($reviewAttachmentIds, $submissionFileIds);

foreach ($sharedFileIds as $sharedFileId) {
$submissionFile = Services::get('submissionFile')->get($sharedFileId);
Services::get('submissionFile')->edit(
$submissionFile,
['viewable' => true],
Application::get()->getRequest()
);
}
}
}

0 comments on commit 24fdcce

Please sign in to comment.