172 lines
5.5 KiB
PHP
172 lines
5.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file pages/submission/SubmissionHandler.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class SubmissionHandler
|
|
*
|
|
* @ingroup pages_submission
|
|
*
|
|
* @brief Handles page requests to the submission wizard
|
|
*/
|
|
|
|
namespace APP\pages\submission;
|
|
|
|
use APP\components\forms\submission\ReconfigureSubmission;
|
|
use APP\components\forms\submission\StartSubmission;
|
|
use APP\core\Application;
|
|
use APP\core\Request;
|
|
use APP\publication\Publication;
|
|
use APP\section\Section;
|
|
use APP\submission\Submission;
|
|
use APP\template\TemplateManager;
|
|
use Illuminate\Support\LazyCollection;
|
|
use PKP\components\forms\FormComponent;
|
|
use PKP\components\forms\publication\Details;
|
|
use PKP\components\forms\publication\TitleAbstractForm;
|
|
use PKP\components\forms\submission\ForTheEditors;
|
|
use PKP\context\Context;
|
|
use PKP\facades\Locale;
|
|
use PKP\pages\submission\PKPSubmissionHandler;
|
|
|
|
class SubmissionHandler extends PKPSubmissionHandler
|
|
{
|
|
/**
|
|
* Display the screen to start a new submission
|
|
*/
|
|
protected function start(array $args, Request $request): void
|
|
{
|
|
$context = $request->getContext();
|
|
$userGroups = $this->getSubmitUserGroups($context, $request->getUser());
|
|
if (!$userGroups->count()) {
|
|
$this->showErrorPage(
|
|
'submission.wizard.notAllowed',
|
|
__('submission.wizard.notAllowed.description', [
|
|
'email' => $context->getData('contactEmail'),
|
|
'name' => $context->getData('contactName'),
|
|
])
|
|
);
|
|
return;
|
|
}
|
|
|
|
$sections = $this->getSubmitSections($context);
|
|
if (empty($sections)) {
|
|
$this->showErrorPage(
|
|
'submission.wizard.notAllowed',
|
|
__('submission.wizard.noSectionAllowed.description', [
|
|
'email' => $context->getData('contactEmail'),
|
|
'name' => $context->getData('contactName'),
|
|
])
|
|
);
|
|
return;
|
|
}
|
|
|
|
$apiUrl = $request->getDispatcher()->url(
|
|
$request,
|
|
Application::ROUTE_API,
|
|
$context->getPath(),
|
|
'submissions'
|
|
);
|
|
|
|
$form = new StartSubmission($apiUrl, $context, $userGroups, $sections);
|
|
|
|
$templateMgr = TemplateManager::getManager($request);
|
|
|
|
$templateMgr->setState([
|
|
'form' => $form->getConfig(),
|
|
]);
|
|
|
|
parent::start($args, $request);
|
|
}
|
|
|
|
protected function getSubmittingTo(Context $context, Submission $submission, array $sections, LazyCollection $categories): string
|
|
{
|
|
$languageCount = count($context->getSupportedSubmissionLocales()) > 1;
|
|
$sectionCount = count($sections) > 1;
|
|
$section = collect($sections)->first(fn ($section) => $section->getId() === $submission->getCurrentPublication()->getData('sectionId'));
|
|
|
|
if ($sectionCount && $languageCount) {
|
|
return __(
|
|
'submission.wizard.submittingToSectionInLanguage',
|
|
[
|
|
'section' => $section->getLocalizedTitle(),
|
|
'language' => Locale::getMetadata($submission->getData('locale'))->getDisplayName(),
|
|
]
|
|
);
|
|
} elseif ($sectionCount) {
|
|
return __(
|
|
'submission.wizard.submittingToSection',
|
|
[
|
|
'section' => $section->getLocalizedTitle(),
|
|
]
|
|
);
|
|
} elseif ($languageCount) {
|
|
return __(
|
|
'submission.wizard.submittingInLanguage',
|
|
[
|
|
'language' => Locale::getMetadata($submission->getData('locale'))->getDisplayName(),
|
|
]
|
|
);
|
|
}
|
|
return '';
|
|
}
|
|
|
|
protected function getReconfigureForm(Context $context, Submission $submission, Publication $publication, array $sections, LazyCollection $categories): ReconfigureSubmission
|
|
{
|
|
return new ReconfigureSubmission(
|
|
FormComponent::ACTION_EMIT,
|
|
$submission,
|
|
$publication,
|
|
$context,
|
|
$sections
|
|
);
|
|
}
|
|
|
|
protected function getDetailsForm(string $publicationApiUrl, array $locales, Publication $publication, Context $context, array $sections, string $suggestionUrlBase): TitleAbstractForm
|
|
{
|
|
/** @var Section $section */
|
|
$section = collect($sections)->first(fn ($section) => $section->getId() === $publication->getData('sectionId'));
|
|
|
|
return new Details(
|
|
$publicationApiUrl,
|
|
$locales,
|
|
$publication,
|
|
$context,
|
|
$suggestionUrlBase,
|
|
(int) $section->getData('wordCount'),
|
|
!$section->getData('abstractsNotRequired')
|
|
);
|
|
}
|
|
|
|
protected function getForTheEditorsForm(string $publicationApiUrl, array $locales, Publication $publication, Submission $submission, Context $context, string $suggestionUrlBase, LazyCollection $categories): ForTheEditors
|
|
{
|
|
return new ForTheEditors(
|
|
$publicationApiUrl,
|
|
$locales,
|
|
$publication,
|
|
$submission,
|
|
$context,
|
|
$suggestionUrlBase,
|
|
$categories
|
|
);
|
|
}
|
|
|
|
protected function getReconfigurePublicationProps(): array
|
|
{
|
|
return [
|
|
'sectionId',
|
|
];
|
|
}
|
|
|
|
protected function getReconfigureSubmissionProps(): array
|
|
{
|
|
return [
|
|
'locale',
|
|
];
|
|
}
|
|
}
|