<?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');
}
}
|