From aadfe44e6ad8ae4310e2e727082ed07c953f6205 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 13 Sep 2024 16:50:28 +0200 Subject: [PATCH] try to resolve wrong submissionUrl --- classes/mail/mailables/DiscussionReview.php | 4 ++-- classes/mail/variables/SubmissionEmailVariable.php | 9 ++++++++- controllers/grid/queries/QueriesGridHandler.php | 10 +++++++++- controllers/grid/queries/form/QueryForm.php | 2 +- controllers/grid/queries/traits/StageMailable.php | 4 ++-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/classes/mail/mailables/DiscussionReview.php b/classes/mail/mailables/DiscussionReview.php index 18bed84083f..8218e21deea 100644 --- a/classes/mail/mailables/DiscussionReview.php +++ b/classes/mail/mailables/DiscussionReview.php @@ -51,9 +51,9 @@ class DiscussionReview extends Mailable protected Context $context; - public function __construct(Context $context, Submission $submission) + public function __construct(Context $context, int|null$recipientRoleId = null, Submission $submission) { - parent::__construct([$context, $submission]); + parent::__construct([$context, $recipientRoleId, $submission]); $this->context = $context; } } diff --git a/classes/mail/variables/SubmissionEmailVariable.php b/classes/mail/variables/SubmissionEmailVariable.php index 9f1d11a1ca7..71296c15605 100644 --- a/classes/mail/variables/SubmissionEmailVariable.php +++ b/classes/mail/variables/SubmissionEmailVariable.php @@ -23,6 +23,7 @@ use PKP\core\PKPApplication; use PKP\core\PKPString; use PKP\mail\Mailable; +use PKP\security\Role; abstract class SubmissionEmailVariable extends Variable { @@ -37,13 +38,16 @@ abstract class SubmissionEmailVariable extends Variable public const SUBMISSION_WIZARD_URL = 'submissionWizardUrl'; protected Submission $submission; + protected int|null $recipientRoleId; protected Publication $currentPublication; + - public function __construct(Submission $submission, Mailable $mailable) + public function __construct(Submission $submission, int|null$recipientRoleId = null, Mailable $mailable) { parent::__construct($mailable); $this->submission = $submission; + $this->recipientRoleId = $recipientRoleId; $this->currentPublication = $this->submission->getCurrentPublication(); } @@ -120,6 +124,9 @@ protected function getAuthorSubmissionUrl(Context $context): string */ protected function getSubmissionUrl(Context $context): string { + if ($this->recipientRoleId === Role::ROLE_ID_AUTHOR) { + return $this->getAuthorSubmissionUrl($context); + } $application = PKPApplication::get(); $request = $application->getRequest(); $dispatcher = $application->getDispatcher(); diff --git a/controllers/grid/queries/QueriesGridHandler.php b/controllers/grid/queries/QueriesGridHandler.php index caedd3b2524..b98b18dd695 100644 --- a/controllers/grid/queries/QueriesGridHandler.php +++ b/controllers/grid/queries/QueriesGridHandler.php @@ -43,6 +43,7 @@ use PKP\security\authorization\QueryWorkflowStageAccessPolicy; use PKP\security\Role; use PKP\submissionFile\SubmissionFile; +use PKP\stageAssignment\StageAssignmentDAO; class QueriesGridHandler extends GridHandler { @@ -675,8 +676,15 @@ public function updateQuery($args, $request) if (!$notification || in_array(Notification::NOTIFICATION_TYPE_NEW_QUERY, $notificationSubscriptionSettings)) { continue; } + //check if currentUser is assigned as author + $stageAssignmentDao = new StageAssignmentDAO(); + $stageAssignments = $stageAssignmentDao->getBySubmissionAndRoleIds($submission->getId(), [Role::ROLE_ID_AUTHOR], $this->getStageId(), $userId); - $mailable = $this->getStageMailable($request->getContext(), $submission) + if ( $stageAssignments->next()) { $currentRole = Role::ROLE_ID_AUTHOR; //currentUser is author + } else $currentRole = null; + + + $mailable = $this->getStageMailable($request->getContext(), $currentRole, $submission) ->sender($currentUser) ->recipients([$user]) ->subject($note->title) diff --git a/controllers/grid/queries/form/QueryForm.php b/controllers/grid/queries/form/QueryForm.php index 03a64eced8d..41715cba6a3 100644 --- a/controllers/grid/queries/form/QueryForm.php +++ b/controllers/grid/queries/form/QueryForm.php @@ -262,7 +262,7 @@ public function fetch($request, $template = null, $display = false, $actionArgs // Add the templates that can be used for this discussion $templateKeySubjectPairs = []; if ($user->hasRole([Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT], $context->getId())) { - $mailable = $this->getStageMailable($context, $submission); + $mailable = $this->getStageMailable($context, null, $submission); $data = $mailable->getData(); $defaultTemplate = Repo::emailTemplate()->getByKey($context->getId(), $mailable::getEmailTemplateKey()); $templateKeySubjectPairs = [$mailable::getEmailTemplateKey() => $defaultTemplate->getLocalizedData('name')]; diff --git a/controllers/grid/queries/traits/StageMailable.php b/controllers/grid/queries/traits/StageMailable.php index 2702a8ec2d8..2b70bcf39fc 100644 --- a/controllers/grid/queries/traits/StageMailable.php +++ b/controllers/grid/queries/traits/StageMailable.php @@ -31,7 +31,7 @@ abstract public function getStageId(); /** * @return Mailable which corresponds to the given workflow stage */ - protected function getStageMailable(Context $context, Submission $submission): Mailable + protected function getStageMailable(Context $context, int|null $recipientRoleId = null, Submission $submission): Mailable { $map = [ WORKFLOW_STAGE_ID_SUBMISSION => DiscussionSubmission::class, @@ -41,6 +41,6 @@ protected function getStageMailable(Context $context, Submission $submission): M WORKFLOW_STAGE_ID_PRODUCTION => DiscussionProduction::class, ]; $mailableClassName = $map[$this->getStageId()]; - return new $mailableClassName($context, $submission); + return new $mailableClassName($context, $recipientRoleId, $submission); } }