first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-06-08 17:09:23 -04:00
commit df3a033196
17887 changed files with 8637778 additions and 0 deletions
@@ -0,0 +1,39 @@
<?php
/**
* @file classes/components/form/submission/CommentsForTheEditors.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 CommentsForTheEditors
*
* @ingroup classes_controllers_form
*
* @brief A form during the For the Editors step in the submission wizard
*/
namespace PKP\components\forms\submission;
use APP\submission\Submission;
use PKP\components\forms\FieldRichTextarea;
use PKP\components\forms\FormComponent;
class CommentsForTheEditors extends FormComponent
{
public $id = 'commentsForTheEditors';
public $method = 'PUT';
public Submission $submission;
public function __construct(string $action, Submission $submission)
{
$this->action = $action;
$this->submission = $submission;
$this->addField(new FieldRichTextarea('commentsForTheEditors', [
'label' => __('submission.submit.coverNote'),
'description' => __('submission.wizard.commentsForTheEditor.description'),
'value' => $this->submission->getData('commentsForTheEditors'),
]));
}
}
@@ -0,0 +1,58 @@
<?php
/**
* @file classes/components/form/submission/ConfirmSubmission.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 ConfirmSubmission
*
* @ingroup classes_controllers_form
*
* @brief A preset form for the confirm step in the submission wizard
*/
namespace PKP\components\forms\submission;
use PKP\components\forms\FieldOptions;
use PKP\components\forms\FormComponent;
use PKP\context\Context;
define('FORM_CONFIRM_SUBMISSION', 'confirmSubmission');
class ConfirmSubmission extends FormComponent
{
/** @copydoc FormComponent::$id */
public $id = FORM_CONFIRM_SUBMISSION;
/** @copydoc FormComponent::$method */
public $method = 'PUT';
public function __construct(string $action, Context $context)
{
$this->action = $action;
if ($context->getLocalizedData('copyrightNotice')) {
$this->addField(new FieldOptions('confirmCopyright', [
'label' => __('submission.copyright'),
'description' => $this->getCopyrightDescription($context),
'options' => [
[
'value' => true,
'label' => __('submission.copyright.agree'),
],
],
'value' => false,
]));
}
}
protected function getCopyrightDescription(Context $context)
{
return __('submission.copyright.description')
. '<blockquote>'
. $context->getLocalizedData('copyrightNotice')
. '</blockquote>';
}
}
@@ -0,0 +1,128 @@
<?php
/**
* @file classes/components/form/publication/ForTheEditors.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 ForTheEditors
*
* @ingroup classes_controllers_form
*
* @brief A form during the For the Editors step in the submission wizard
*/
namespace PKP\components\forms\submission;
use APP\facades\Repo;
use APP\publication\Publication;
use APP\submission\Submission;
use Illuminate\Support\LazyCollection;
use PKP\components\forms\FieldAutosuggestPreset;
use PKP\components\forms\FieldOptions;
use PKP\components\forms\publication\PKPMetadataForm;
use PKP\context\Context;
class ForTheEditors extends PKPMetadataForm
{
/**
* How many categories can be present before the options field
* should become an autosuggest field
*/
public const MAX_CATEGORY_LIST_SIZE = 10;
public $id = 'forTheEditors';
public $method = 'PUT';
public Context $context;
public Publication $publication;
public Submission $submission;
public function __construct(string $action, array $locales, Publication $publication, Submission $submission, Context $context, string $suggestionUrlBase, LazyCollection $categories)
{
parent::__construct($action, $locales, $publication, $context, $suggestionUrlBase);
$this->submission = $submission;
$this->removeField('keywords');
$this->changeTooltipsToDescriptions();
$this->setRequiredMetadata();
$this->addCategoryField($context, $categories);
}
/**
* Whether or not a metadata field is enabled in this form
*/
protected function enabled(string $setting): bool
{
return in_array(
$this->context->getData($setting),
[
Context::METADATA_REQUEST,
Context::METADATA_REQUIRE
]
);
}
/**
* Changes the tooltips for the metadata fields to
* descriptions.
*
* Because authors are more likely to be encountering the metadata
* for the first time.
*/
protected function changeTooltipsToDescriptions(): void
{
foreach ($this->fields as $field) {
$field->description = $field->tooltip;
$field->tooltip = null;
}
}
/**
* Change the metadata fields to required when the
* author must provide them before submitting
*/
protected function setRequiredMetadata(): void
{
foreach ($this->fields as $field) {
$field->isRequired = $this->context->getData($field->name) === Context::METADATA_REQUIRE;
}
}
protected function addCategoryField(Context $context, LazyCollection $categories): void
{
if (!$context->getData('submitWithCategories') || !$categories->count()) {
return;
}
$categoryOptions = [];
$categoryOptions = Repo::category()
->getBreadcrumbs($categories)
->map(fn ($breadcrumb, $id) => [
'value' => $id,
'label' => $breadcrumb
])
->values()
->all();
$categoryValues = (array) $this->publication->getData('categoryIds');
if (count($categoryOptions) > self::MAX_CATEGORY_LIST_SIZE) {
$this->addField(new FieldAutosuggestPreset('categoryIds', [
'label' => __('submission.submit.placement.categories'),
'description' => __('submission.wizard.categories.description'),
'value' => $categoryValues,
'options' => $categoryOptions
]));
} else {
$this->addField(new FieldOptions('categoryIds', [
'label' => __('submission.submit.placement.categories'),
'description' => __('submission.wizard.categories.description'),
'value' => $categoryValues,
'options' => $categoryOptions,
]));
}
}
}
@@ -0,0 +1,54 @@
<?php
/**
* @file classes/components/form/context/PKPSubmissionFileForm.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 PKPSubmissionFileForm
*
* @ingroup classes_controllers_form
*
* @brief A preset form for editing a submission file
*/
namespace PKP\components\forms\submission;
use PKP\components\forms\FieldOptions;
use PKP\components\forms\FormComponent;
define('FORM_SUBMISSION_FILE', 'submissionFile');
class PKPSubmissionFileForm extends FormComponent
{
/** @copydoc FormComponent::$id */
public $id = FORM_SUBMISSION_FILE;
/** @copydoc FormComponent::$method */
public $method = 'PUT';
/**
* Constructor
*
* @param string $action URL to submit the form to
* @param array $genres List of genres to use as options
*/
public function __construct($action, $genres)
{
$this->action = $action;
$this->addField(new FieldOptions('genreId', [
'label' => __('submission.submit.genre.label'),
'description' => __('submission.submit.genre.description'),
'type' => 'radio',
'options' => array_map(function ($genre) {
return [
'value' => (int) $genre->getId(),
'label' => htmlspecialchars($genre->getLocalizedName()),
];
}, $genres),
'value' => 0,
]));
}
}
@@ -0,0 +1,64 @@
<?php
/**
* @file classes/components/form/submission/ReconfigureSubmission.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 ReconfigureSubmission
*
* @ingroup classes_controllers_form
*
* @brief A preset form for configuring the submission wizard, such as the
* submission's section or language, after the submission was started.
*/
namespace PKP\components\forms\submission;
use APP\publication\Publication;
use APP\submission\Submission;
use PKP\components\forms\FieldOptions;
use PKP\components\forms\FormComponent;
use PKP\context\Context;
abstract class ReconfigureSubmission extends FormComponent
{
public $id = 'reconfigureSubmission';
public $method = 'PUT';
public Submission $submission;
public Publication $publication;
public Context $context;
public function __construct(string $action, Submission $submission, Publication $publication, Context $context)
{
$this->action = $action;
$this->context = $context;
$this->publication = $publication;
$this->submission = $submission;
$locales = $context->getSupportedSubmissionLocaleNames();
if (count($locales) > 1) {
$this->addLocaleField($locales);
}
}
protected function addLocaleField(array $locales): void
{
$options = [];
foreach ($locales as $locale => $name) {
$options[] = [
'value' => $locale,
'label' => $name,
];
}
$this->addField(new FieldOptions('locale', [
'label' => __('submission.submit.submissionLocale'),
'description' => __('submission.submit.submissionLocaleDescription'),
'type' => 'radio',
'options' => $options,
'isRequired' => true,
'value' => $this->submission->getData('locale'),
]));
}
}
@@ -0,0 +1,221 @@
<?php
/**
* @file classes/components/form/submission/StartSubmission.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 StartSubmission
*
* @ingroup classes_controllers_form
*
* @brief The form to begin the submission wizard
*/
namespace PKP\components\forms\submission;
use APP\core\Application;
use Illuminate\Support\Enumerable;
use PKP\components\forms\FieldHTML;
use PKP\components\forms\FieldOptions;
use PKP\components\forms\FieldRichText;
use PKP\components\forms\FormComponent;
use PKP\config\Config;
use PKP\context\Context;
use PKP\security\Role;
use PKP\userGroup\UserGroup;
class StartSubmission extends FormComponent
{
/** @var string id for the form's group and page configuration */
public const GROUP = 'default';
public $id = 'startSubmission';
public $method = 'POST';
public Context $context;
public Enumerable $userGroups;
/**
* @param Enumerable<UserGroup> $userGroups The user groups this user can submit as in this context
*/
public function __construct(string $action, Context $context, Enumerable $userGroups)
{
$this->action = $action;
$this->context = $context;
$this->userGroups = $userGroups;
$this->addIntroduction($context);
$this->addLanguage($context);
$this->addTitle();
$this->addSubmissionChecklist($context);
$this->addUserGroups($userGroups);
$this->addPrivacyConsent($context);
}
/**
* Add a custom button to the form and modify all
* fields as required
*/
public function getConfig()
{
$this->addPage([
'id' => self::GROUP,
'submitButton' => [
'label' => __('submission.wizard.start'),
'isPrimary' => true,
]
])
->addGroup([
'id' => self::GROUP,
'pageId' => self::GROUP,
]);
foreach ($this->fields as $field) {
$field->groupId = self::GROUP;
}
return parent::getConfig();
}
protected function addTitle(): void
{
$this->addField(new FieldRichText('title', [
'label' => __('common.title'),
'size' => 'oneline',
'isRequired' => true,
'value' => '',
]));
}
protected function addIntroduction(Context $context): void
{
if (!$context->getLocalizedData('beginSubmissionHelp')) {
return;
}
$this->addField(new FieldHTML('introduction', [
'label' => __('submission.wizard.beforeStart'),
'description' => $context->getLocalizedData('beginSubmissionHelp'),
]));
}
protected function addLanguage(Context $context): void
{
$languages = $context->getSupportedSubmissionLocaleNames();
if (count($languages) < 2) {
return;
}
$options = [];
foreach ($languages as $locale => $name) {
$options[] = [
'value' => $locale,
'label' => $name,
];
}
$this->addField(new FieldOptions('locale', [
'label' => __('submission.submit.submissionLocale'),
'description' => __('submission.submit.submissionLocaleDescription'),
'type' => 'radio',
'options' => $options,
'value' => '',
'isRequired' => true,
]));
}
protected function addSubmissionChecklist(Context $context): void
{
if (!$context->getLocalizedData('submissionChecklist')) {
return;
}
$this->addField(new FieldOptions('submissionRequirements', [
'label' => __('submission.submit.submissionChecklist'),
'description' => $context->getLocalizedData('submissionChecklist'),
'options' => [
[
'value' => true,
'label' => __('submission.submit.submissionChecklistConfirm'),
],
],
'value' => false,
'isRequired' => true,
]));
}
/**
* Allow the user to select which user group to submit as
*
* This field is only shown when the user can submit in more
* than one group.
*/
protected function addUserGroups(Enumerable $userGroups): void
{
if ($userGroups->count() < 2) {
return;
}
$options = $userGroups->map(fn (UserGroup $userGroup) => [
'value' => $userGroup->getId(),
'label' => $userGroup->getLocalizedName(),
]);
$hasEditorialRole = $userGroups->contains(
fn (UserGroup $userGroup) => in_array($userGroup->getRoleId(), [Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN])
);
$description = __('submission.submit.availableUserGroupsDescription');
if ($hasEditorialRole) {
$description .= ' ' . __('submission.submit.managerUserGroupsDescription');
}
$this->addField(new FieldOptions('userGroupId', [
'label' => __('submission.submit.availableUserGroups'),
'description' => $description,
'type' => 'radio',
'options' => $options->values()->toArray(),
'value' => $options->first()['value'],
'isRequired' => true,
]));
}
protected function addPrivacyConsent(Context $context): void
{
$privacyStatement = Config::getVar('general', 'sitewide_privacy_statement')
? Application::get()
->getRequest()
->getSite()
->getData('privacyStatement')
: $context->getData('privacyStatement');
if (!$privacyStatement) {
return;
}
$privacyUrl = Application::get()
->getRequest()
->getDispatcher()
->url(
Application::get()->getRequest(),
Application::ROUTE_PAGE,
null,
'about',
'privacy'
);
$this->addField(new FieldOptions('privacyConsent', [
'label' => __('submission.wizard.privacyConsent'),
'options' => [
[
'value' => true,
'label' => __('user.register.form.privacyConsent', [
'privacyUrl' => $privacyUrl,
]),
],
],
'value' => false,
'isRequired' => true,
]));
}
}
@@ -0,0 +1,118 @@
<?php
/**
* @file classes/components/form/submission/SubmissionGuidanceSettings.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 SubmissionGuidanceSettings
*
* @ingroup classes_controllers_form
*
* @brief A form for the submission wizard instruction settings.
*/
namespace PKP\components\forms\submission;
use APP\core\Application;
use PKP\components\forms\FieldRichTextarea;
use PKP\components\forms\FormComponent;
use PKP\context\Context;
define('FORM_METADATA', 'metadata');
class SubmissionGuidanceSettings extends FormComponent
{
public $id = 'submissionGuidanceSettings';
public $method = 'PUT';
public Context $context;
public function __construct(string $action, array $locales, Context $context)
{
$this->action = $action;
$this->locales = $locales;
$this->context = $context;
$submissionUrl = Application::get()->getRequest()->getDispatcher()->url(
Application::get()->getRequest(),
Application::ROUTE_PAGE,
$context->getPath(),
'about',
'submissions'
);
$this->addField(new FieldRichTextarea('authorGuidelines', [
'label' => __('manager.setup.authorGuidelines'),
'description' => __('manager.setup.authorGuidelines.description', ['url' => $submissionUrl]),
'isMultilingual' => true,
'value' => $context->getData('authorGuidelines'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('beginSubmissionHelp', [
'label' => __('submission.wizard.beforeStart'),
'description' => __('manager.setup.workflow.beginSubmissionHelp.description'),
'isMultilingual' => true,
'value' => $context->getData('beginSubmissionHelp'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('submissionChecklist', [
'label' => __('manager.setup.submissionPreparationChecklist'),
'description' => __('manager.setup.submissionPreparationChecklistDescription'),
'isMultilingual' => true,
'value' => $context->getData('submissionChecklist'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('uploadFilesHelp', [
'label' => __('submission.upload.uploadFiles'),
'description' => __('manager.setup.workflow.uploadFilesHelp.description'),
'isMultilingual' => true,
'value' => $context->getData('uploadFilesHelp'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('contributorsHelp', [
'label' => __('publication.contributors'),
'description' => __('manager.setup.workflow.contributorsHelp.description'),
'isMultilingual' => true,
'value' => $context->getData('contributorsHelp'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('detailsHelp', [
'label' => __('common.details'),
'description' => __('manager.setup.workflow.detailsHelp.description'),
'isMultilingual' => true,
'value' => $context->getData('detailsHelp'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('forTheEditorsHelp', [
'label' => __('submission.forTheEditors'),
'description' => __('manager.setup.workflow.forTheEditorsHelp.description'),
'isMultilingual' => true,
'value' => $context->getData('forTheEditorsHelp'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('reviewHelp', [
'label' => __('submission.reviewAndSubmit'),
'description' => __('manager.setup.workflow.reviewHelp.description'),
'isMultilingual' => true,
'value' => $context->getData('reviewHelp'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]))
->addField(new FieldRichTextarea('copyrightNotice', [
'label' => __('manager.setup.copyrightNotice'),
'description' => __('manager.setup.copyrightNotice.description', ['url' => $submissionUrl]),
'isMultilingual' => true,
'value' => $context->getData('copyrightNotice'),
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist',
'plugins' => 'paste,link,lists',
]));
}
}