Files
OSJ/lib/pkp/classes/components/listPanels/ContributorsListPanel.php
CHIEFSOFT\ameye df3a033196 first commit
2024-06-08 17:09:23 -04:00

141 lines
4.7 KiB
PHP

<?php
/**
* @file classes/components/listPanels/ContributorsListPanel.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 ContributorsListPanel
*
* @ingroup classes_components_list
*
* @brief A ListPanel component for viewing and editing contributors
*/
namespace PKP\components\listPanels;
use APP\core\Application;
use APP\submission\Submission;
use PKP\components\forms\publication\ContributorForm;
use PKP\context\Context;
class ContributorsListPanel extends ListPanel
{
public Submission $submission;
public Context $context;
public array $locales;
/** Whether the user can edit the current publication */
public bool $canEditPublication;
public function __construct(
string $id,
string $title,
Submission $submission,
Context $context,
array $locales,
array $items = [],
bool $canEditPublication = false
) {
parent::__construct($id, $title);
$this->submission = $submission;
$this->context = $context;
$this->locales = $locales;
$this->items = $items;
$this->canEditPublication = $canEditPublication;
}
/**
* @copydoc ListPanel::getConfig()
*/
public function getConfig()
{
$config = parent::getConfig();
// Remove some props not used in this list panel
unset($config['description']);
unset($config['expanded']);
unset($config['headingLevel']);
$config = array_merge(
$config,
[
'canEditPublication' => $this->canEditPublication,
'publicationApiUrlFormat' => $this->getPublicationUrlFormat(),
'form' => $this->getLocalizedForm(),
'items' => $this->items,
'i18nAddContributor' => __('grid.action.addContributor'),
'i18nConfirmDelete' => __('grid.action.deleteContributor.confirmationMessage'),
'i18nDeleteContributor' => __('grid.action.deleteContributor'),
'i18nEditContributor' => __('grid.action.edit'),
'i18nSetPrimaryContact' => __('author.users.contributor.setPrincipalContact'),
'i18nPrimaryContact' => __('author.users.contributor.principalContact'),
'i18nContributors' => __('submission.contributors'),
'i18nSaveOrder' => __('grid.action.saveOrdering'),
'i18nPreview' => __('contributor.listPanel.preview'),
'i18nPreviewDescription' => __('contributor.listPanel.preview.description'),
'i18nDisplay' => __('contributor.listPanel.preview.display'),
'i18nFormat' => __('contributor.listPanel.preview.format'),
'i18nAbbreviated' => __('contributor.listPanel.preview.abbreviated'),
'i18nPublicationLists' => __('contributor.listPanel.preview.publicationLists'),
'i18nFull' => __('contributor.listPanel.preview.full'),
]
);
return $config;
}
/**
* Get an example of the url to a publication's API endpoint,
* with a placeholder instead of the publication id, eg:
*
* http://example.org/api/v1/submissions/1/publications/__publicationId__
*/
protected function getPublicationUrlFormat(): string
{
return Application::get()->getRequest()->getDispatcher()->url(
Application::get()->getRequest(),
Application::ROUTE_API,
$this->context->getPath(),
'submissions/' . $this->submission->getId() . '/publications/__publicationId__'
);
}
/**
* Get the form data localized to the submission's locale
*/
protected function getLocalizedForm(): array
{
uksort($this->locales, fn ($a, $b) => $a === $this->submission->getData('locale') ? -1 : 1);
$apiUrl = Application::get()->getRequest()->getDispatcher()->url(
Application::get()->getRequest(),
Application::ROUTE_API,
$this->context->getPath(),
'submissions/' . $this->submission->getId() . '/publications/__publicationId__/contributors'
);
$form = $this->getForm($apiUrl);
$data = $form->getConfig();
$data['primaryLocale'] = $this->submission->getData('locale');
$data['visibleLocales'] = [$this->submission->getData('locale')];
return $data;
}
/**
* Get the contributor form
*/
protected function getForm(string $url): ContributorForm
{
return new ContributorForm(
$url,
$this->locales,
$this->submission,
$this->context
);
}
}