258 lines
5.7 KiB
PHP
258 lines
5.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/author/Author.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 \PKP\author\Author
|
|
*
|
|
* @ingroup author
|
|
*
|
|
* @see DAO
|
|
*
|
|
* @brief Author metadata class.
|
|
*/
|
|
|
|
namespace PKP\author;
|
|
|
|
use APP\facades\Repo;
|
|
use PKP\facades\Locale;
|
|
use PKP\identity\Identity;
|
|
|
|
class Author extends Identity
|
|
{
|
|
/**
|
|
* Get the default/fall back locale the values should exist for
|
|
*/
|
|
public function getDefaultLocale(): ?string
|
|
{
|
|
return $this->getSubmissionLocale();
|
|
}
|
|
|
|
/**
|
|
* @copydoc Identity::getLocalizedGivenName()
|
|
*/
|
|
public function getLocalizedGivenName()
|
|
{
|
|
return $this->getLocalizedData(self::IDENTITY_SETTING_GIVENNAME);
|
|
}
|
|
|
|
/**
|
|
* @copydoc Identity::getLocalizedFamilyName()
|
|
*/
|
|
public function getLocalizedFamilyName()
|
|
{
|
|
// Prioritize the current locale, then the default locale.
|
|
$locale = Locale::getLocale();
|
|
$givenName = $this->getGivenName($locale);
|
|
// Only use the family name if a given name exists (to avoid mixing locale data)
|
|
if (!empty($givenName)) {
|
|
return $this->getFamilyName($locale);
|
|
}
|
|
// Fall back on the submission locale.
|
|
return $this->getFamilyName($this->getSubmissionLocale());
|
|
}
|
|
|
|
//
|
|
// Get/set methods
|
|
//
|
|
|
|
/**
|
|
* Get ID of submission.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function getSubmissionId()
|
|
{
|
|
return $this->getData('submissionId');
|
|
}
|
|
|
|
/**
|
|
* Set ID of submission.
|
|
*
|
|
* @param int $submissionId
|
|
*/
|
|
public function setSubmissionId($submissionId)
|
|
{
|
|
$this->setData('submissionId', $submissionId);
|
|
}
|
|
|
|
/**
|
|
* Get submission locale.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getSubmissionLocale()
|
|
{
|
|
return $this->getData('locale');
|
|
}
|
|
|
|
/**
|
|
* Set submission locale.
|
|
*
|
|
* @param string $locale
|
|
*/
|
|
public function setSubmissionLocale($locale)
|
|
{
|
|
return $this->setData('locale', $locale);
|
|
}
|
|
|
|
/**
|
|
* Set the user group id
|
|
*
|
|
* @param int $userGroupId
|
|
*/
|
|
public function setUserGroupId($userGroupId)
|
|
{
|
|
$this->setData('userGroupId', $userGroupId);
|
|
}
|
|
|
|
/**
|
|
* Get the user group id
|
|
*
|
|
* @return int
|
|
*/
|
|
public function getUserGroupId()
|
|
{
|
|
return $this->getData('userGroupId');
|
|
}
|
|
|
|
/**
|
|
* Set whether or not to include in browse lists.
|
|
*
|
|
* @param bool $include
|
|
*/
|
|
public function setIncludeInBrowse($include)
|
|
{
|
|
$this->setData('includeInBrowse', $include);
|
|
}
|
|
|
|
/**
|
|
* Get whether or not to include in browse lists.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function getIncludeInBrowse()
|
|
{
|
|
return $this->getData('includeInBrowse');
|
|
}
|
|
|
|
/**
|
|
* Get the "show title" flag (whether or not the title of the role
|
|
* should be included in the list of submission contributor names).
|
|
* This is fetched from the user group for performance reasons.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function getShowTitle()
|
|
{
|
|
return $this->getData('showTitle');
|
|
}
|
|
|
|
/**
|
|
* Set the "show title" flag. This attribute belongs to the user group,
|
|
* NOT the author; fetched for performance reasons only.
|
|
*
|
|
* @param bool $showTitle
|
|
*/
|
|
public function _setShowTitle($showTitle)
|
|
{
|
|
$this->setData('showTitle', $showTitle);
|
|
}
|
|
|
|
/**
|
|
* Get primary contact.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function getPrimaryContact()
|
|
{
|
|
return $this->getData('primaryContact');
|
|
}
|
|
|
|
/**
|
|
* Set primary contact.
|
|
*
|
|
* @param bool $primaryContact
|
|
*/
|
|
public function setPrimaryContact($primaryContact)
|
|
{
|
|
$this->setData('primaryContact', $primaryContact);
|
|
}
|
|
|
|
/**
|
|
* Get sequence of author in submissions' author list.
|
|
*
|
|
* @return float
|
|
*/
|
|
public function getSequence()
|
|
{
|
|
return $this->getData('seq');
|
|
}
|
|
|
|
/**
|
|
* Set sequence of author in submissions' author list.
|
|
*
|
|
* @param float $sequence
|
|
*/
|
|
public function setSequence($sequence)
|
|
{
|
|
$this->setData('seq', $sequence);
|
|
}
|
|
|
|
/**
|
|
* Get the user group for this contributor.
|
|
*
|
|
* @return \PKP\userGroup\UserGroup
|
|
*/
|
|
public function getUserGroup()
|
|
{
|
|
//FIXME: should this be queried when fetching Author from DB? - see #5231.
|
|
static $userGroup; // Frequently we'll fetch the same one repeatedly
|
|
if (!$userGroup || $this->getUserGroupId() != $userGroup->getId()) {
|
|
$userGroup = Repo::userGroup()->get($this->getUserGroupId());
|
|
}
|
|
return $userGroup;
|
|
}
|
|
|
|
/**
|
|
* Get a localized version of the User Group
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getLocalizedUserGroupName()
|
|
{
|
|
$userGroup = $this->getUserGroup();
|
|
return $userGroup->getLocalizedName();
|
|
}
|
|
|
|
/**
|
|
* Get competing interests.
|
|
* @return string|array|null
|
|
*/
|
|
function getCompetingInterests(?string $locale)
|
|
{
|
|
return $this->getData('competingInterests', $locale);
|
|
}
|
|
|
|
/**
|
|
* Set competing interests.
|
|
* @param $competingInterests string|array|null
|
|
*/
|
|
function setCompetingInterests($competingInterests, ?string $locale)
|
|
{
|
|
$this->setData('competingInterests', $competingInterests, $locale);
|
|
}
|
|
|
|
/**
|
|
* Get a localized version competing interest statement
|
|
*/
|
|
function getLocalizedCompetingInterests(): ?string
|
|
{
|
|
return $this->getLocalizedData('competingInterests');
|
|
}
|
|
}
|