first commit
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/mail/variables/SubmissionEmailVariable.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class SubmissionEmailVariable
|
||||
*
|
||||
* @ingroup mail_variables
|
||||
*
|
||||
* @brief Represents variables associated with a submission that can be assigned to a template
|
||||
*/
|
||||
|
||||
namespace PKP\mail\variables;
|
||||
|
||||
use APP\publication\Publication;
|
||||
use APP\submission\Submission;
|
||||
use PKP\author\Author;
|
||||
use PKP\context\Context;
|
||||
use PKP\core\PKPApplication;
|
||||
use PKP\core\PKPString;
|
||||
use PKP\mail\Mailable;
|
||||
|
||||
abstract class SubmissionEmailVariable extends Variable
|
||||
{
|
||||
public const AUTHOR_SUBMISSION_URL = 'authorSubmissionUrl';
|
||||
public const AUTHORS = 'authors';
|
||||
public const AUTHORS_SHORT = 'authorsShort';
|
||||
public const SUBMISSION_ABSTRACT = 'submissionAbstract';
|
||||
public const SUBMISSION_ID = 'submissionId';
|
||||
public const SUBMISSION_PUBLISHED_URL = 'submissionPublishedUrl';
|
||||
public const SUBMISSION_TITLE = 'submissionTitle';
|
||||
public const SUBMISSION_URL = 'submissionUrl';
|
||||
public const SUBMISSION_WIZARD_URL = 'submissionWizardUrl';
|
||||
|
||||
protected Submission $submission;
|
||||
protected Publication $currentPublication;
|
||||
|
||||
public function __construct(Submission $submission, Mailable $mailable)
|
||||
{
|
||||
parent::__construct($mailable);
|
||||
|
||||
$this->submission = $submission;
|
||||
$this->currentPublication = $this->submission->getCurrentPublication();
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Variable::descriptions()
|
||||
*/
|
||||
public static function descriptions(): array
|
||||
{
|
||||
return
|
||||
[
|
||||
self::AUTHOR_SUBMISSION_URL => __('emailTemplate.variable.submission.authorSubmissionUrl'),
|
||||
self::AUTHORS => __('emailTemplate.variable.submission.authors'),
|
||||
self::AUTHORS_SHORT => __('emailTemplate.variable.submission.authorsShort'),
|
||||
self::SUBMISSION_ABSTRACT => __('emailTemplate.variable.submission.submissionAbstract'),
|
||||
self::SUBMISSION_ID => __('emailTemplate.variable.submission.submissionId'),
|
||||
self::SUBMISSION_PUBLISHED_URL => __('emailTemplate.variable.submission.submissionPublishedUrl'),
|
||||
self::SUBMISSION_TITLE => __('emailTemplate.variable.submission.submissionTitle'),
|
||||
self::SUBMISSION_URL => __('emailTemplate.variable.submission.submissionUrl'),
|
||||
self::SUBMISSION_WIZARD_URL => __('emailTemplate.variable.submission.submissionWizardUrl'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Variable::values()
|
||||
*/
|
||||
public function values(string $locale): array
|
||||
{
|
||||
$context = $this->getContext();
|
||||
return
|
||||
[
|
||||
self::AUTHOR_SUBMISSION_URL => $this->getAuthorSubmissionUrl($context),
|
||||
self::AUTHORS => htmlspecialchars($this->getAuthorsFull($locale)),
|
||||
self::AUTHORS_SHORT => htmlspecialchars($this->currentPublication->getShortAuthorString($locale)),
|
||||
self::SUBMISSION_ABSTRACT => PKPString::stripUnsafeHtml($this->currentPublication->getLocalizedData('abstract', $locale)),
|
||||
self::SUBMISSION_ID => (string) $this->submission->getId(),
|
||||
self::SUBMISSION_PUBLISHED_URL => $this->getSubmissionPublishedUrl($this->getContext()),
|
||||
self::SUBMISSION_TITLE => $this->currentPublication->getLocalizedFullTitle($locale, 'html'),
|
||||
self::SUBMISSION_URL => $this->getSubmissionUrl($context),
|
||||
self::SUBMISSION_WIZARD_URL => $this->getSubmissionWizardUrl($context),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* List of authors as a string separated by a comma
|
||||
*/
|
||||
protected function getAuthorsFull(string $locale): string
|
||||
{
|
||||
$authors = $this->currentPublication->getData('authors');
|
||||
$fullNames = array_map(function (Author $author) use ($locale) {
|
||||
return $author->getFullName(true, false, $locale);
|
||||
}, iterator_to_array($authors));
|
||||
|
||||
return join(__('common.commaListSeparator'), $fullNames);
|
||||
}
|
||||
|
||||
/**
|
||||
* URL to the author's submission workflow
|
||||
*/
|
||||
protected function getAuthorSubmissionUrl(Context $context): string
|
||||
{
|
||||
$request = PKPApplication::get()->getRequest();
|
||||
return $request->getDispatcher()->url(
|
||||
$request,
|
||||
PKPApplication::ROUTE_PAGE,
|
||||
$context->getData('urlPath'),
|
||||
'authorDashboard',
|
||||
'submission',
|
||||
[
|
||||
$this->submission->getId(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* URL to a current workflow stage of the submission
|
||||
*/
|
||||
protected function getSubmissionUrl(Context $context): string
|
||||
{
|
||||
$application = PKPApplication::get();
|
||||
$request = $application->getRequest();
|
||||
$dispatcher = $application->getDispatcher();
|
||||
return $dispatcher->url(
|
||||
$request,
|
||||
PKPApplication::ROUTE_PAGE,
|
||||
$context->getData('urlPath'),
|
||||
'workflow',
|
||||
'access',
|
||||
$this->submission->getId()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* URL to the submission in the submission wizard
|
||||
*/
|
||||
protected function getSubmissionWizardUrl(Context $context): string
|
||||
{
|
||||
$application = PKPApplication::get();
|
||||
$request = $application->getRequest();
|
||||
$dispatcher = $application->getDispatcher();
|
||||
return $dispatcher->url(
|
||||
$request,
|
||||
PKPApplication::ROUTE_PAGE,
|
||||
$context->getPath(),
|
||||
'submission',
|
||||
null,
|
||||
null,
|
||||
[
|
||||
'id' => $this->submission->getId(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* URL to the published submission
|
||||
*/
|
||||
abstract protected function getSubmissionPublishedUrl(Context $context): string;
|
||||
}
|
||||
Reference in New Issue
Block a user