Files
OSJ/classes/subscription/SubscriptionType.php
CHIEFSOFT\ameye df3a033196 first commit
2024-06-08 17:09:23 -04:00

386 lines
8.9 KiB
PHP

<?php
/**
* @file classes/subscription/SubscriptionType.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 SubscriptionType
*
* @ingroup subscription
*
* @see SubscriptionTypeDAO
*
* @brief Basic class describing a subscription type.
*/
namespace APP\subscription;
use PKP\facades\Locale;
class SubscriptionType extends \PKP\core\DataObject
{
// Subscription type formats
public const SUBSCRIPTION_TYPE_FORMAT_ONLINE = 1;
public const SUBSCRIPTION_TYPE_FORMAT_PRINT = 16;
public const SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE = 17;
//
// Get/set methods
//
/**
* Get the journal ID of the subscription type.
*
* @return int
*/
public function getJournalId()
{
return $this->getData('journalId');
}
/**
* Set the journal ID of the subscription type.
*
* @param int $journalId
*/
public function setJournalId($journalId)
{
return $this->setData('journalId', $journalId);
}
/**
* Get the localized subscription type name
*
* @return string
*/
public function getLocalizedName()
{
return $this->getLocalizedData('name');
}
/**
* Get subscription type name.
*
* @param string $locale
*
* @return string
*/
public function getName($locale)
{
return $this->getData('name', $locale);
}
/**
* Set subscription type name.
*
* @param string $name
* @param string $locale
*/
public function setName($name, $locale)
{
return $this->setData('name', $name, $locale);
}
/**
* Get the localized subscription type description
*
* @return string
*/
public function getLocalizedDescription()
{
return $this->getLocalizedData('description');
}
/**
* Get subscription type description.
*
* @param string $locale
*
* @return string
*/
public function getDescription($locale)
{
return $this->getData('description', $locale);
}
/**
* Set subscription type description.
*
* @param string $description
* @param string $locale
*/
public function setDescription($description, $locale)
{
return $this->setData('description', $description, $locale);
}
/**
* Get subscription type cost.
*
* @return float
*/
public function getCost()
{
return $this->getData('cost');
}
/**
* Set subscription type cost.
*
* @param float $cost
*/
public function setCost($cost)
{
return $this->setData('cost', $cost);
}
/**
* Get subscription type currency code.
*
* @return string
*/
public function getCurrencyCodeAlpha()
{
return $this->getData('currencyCodeAlpha');
}
/**
* Set subscription type currency code.
*
* @param string $currencyCodeAlpha
*/
public function setCurrencyCodeAlpha($currencyCodeAlpha)
{
return $this->setData('currencyCodeAlpha', $currencyCodeAlpha);
}
/**
* Get subscription type currency string.
*
* @return string
*/
public function getCurrencyString()
{
$currency = Locale::getCurrencies()->getByLetterCode($this->getData('currencyCodeAlpha'));
return $currency ? $currency->getLocalName() : 'subscriptionTypes.currency';
}
/**
* Get subscription type currency abbreviated string.
*
* @return string
*/
public function getCurrencyStringShort()
{
$currency = Locale::getCurrencies()->getByLetterCode($this->getData('currencyCodeAlpha'));
return $currency ? $currency->getLetterCode() : 'subscriptionTypes.currency';
}
/**
* Get subscription type nonExpiring.
*
* @return bool
*/
public function getNonExpiring()
{
return $this->getDuration() == null;
}
/**
* Get subscription type duration.
*
* @return int
*/
public function getDuration()
{
return $this->getData('duration');
}
/**
* Set subscription type duration.
*
* @param int $duration
*/
public function setDuration($duration)
{
return $this->setData('duration', $duration);
}
/**
* Get subscription type duration in years and months.
*
* @param string $locale
*
* @return string
*/
public function getDurationYearsMonths($locale = null)
{
if (!$this->getDuration()) {
return __('subscriptionTypes.nonExpiring', [], $locale);
}
$years = (int)floor($this->getDuration() / 12);
$months = (int)fmod($this->getDuration(), 12);
$yearsMonths = '';
if ($years == 1) {
$yearsMonths = '1 ' . __('subscriptionTypes.year', [], $locale);
} elseif ($years > 1) {
$yearsMonths = $years . ' ' . __('subscriptionTypes.years', [], $locale);
}
if ($months == 1) {
$yearsMonths .= $yearsMonths == '' ? '1 ' : ' 1 ';
$yearsMonths .= __('subscriptionTypes.month', [], $locale);
} elseif ($months > 1) {
$yearsMonths .= $yearsMonths == '' ? $months . ' ' : ' ' . $months . ' ';
$yearsMonths .= __('subscriptionTypes.months', [], $locale);
}
return $yearsMonths;
}
/**
* Get subscription type format.
*
* @return int
*/
public function getFormat()
{
return $this->getData('format');
}
/**
* Set subscription type format.
*
* @param int $format
*/
public function setFormat($format)
{
return $this->setData('format', $format);
}
/**
* Get subscription type format locale key.
*
* @return string
*/
public function getFormatString()
{
switch ($this->getData('format')) {
case self::SUBSCRIPTION_TYPE_FORMAT_ONLINE:
return 'subscriptionTypes.format.online';
case self::SUBSCRIPTION_TYPE_FORMAT_PRINT:
return 'subscriptionTypes.format.print';
case self::SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE:
return 'subscriptionTypes.format.printOnline';
default:
return 'subscriptionTypes.format';
}
}
/**
* Check if this subscription type is for an institution.
*
* @return bool
*/
public function getInstitutional()
{
return $this->getData('institutional');
}
/**
* Set whether or not this subscription type is for an institution.
*
* @param bool $institutional
*/
public function setInstitutional($institutional)
{
return $this->setData('institutional', $institutional);
}
/**
* Check if this subscription type requires a membership.
*
* @return bool
*/
public function getMembership()
{
return $this->getData('membership');
}
/**
* Set whether or not this subscription type requires a membership.
*
* @param bool $membership
*/
public function setMembership($membership)
{
return $this->setData('membership', $membership);
}
/**
* Check if this subscription type should be publicly visible.
*
* @return bool
*/
public function getDisablePublicDisplay()
{
return $this->getData('disable_public_display');
}
/**
* Set whether or not this subscription type should be publicly visible.
*
* @param bool $disablePublicDisplay
*/
public function setDisablePublicDisplay($disablePublicDisplay)
{
return $this->setData('disable_public_display', $disablePublicDisplay);
}
/**
* Get subscription type display sequence.
*
* @return float
*/
public function getSequence()
{
return $this->getData('sequence');
}
/**
* Set subscription type display sequence.
*
* @param float $sequence
*/
public function setSequence($sequence)
{
return $this->setData('sequence', $sequence);
}
/**
* Get subscription type summary in the form: TypeName - Duration - Cost (CurrencyShort).
*
* @return string
*/
public function getSummaryString()
{
return $this->getLocalizedName() . ' - ' . $this->getDurationYearsMonths() . ' - ' . sprintf('%.2f', $this->getCost()) . ' ' . $this->getCurrencyStringShort();
}
}
if (!PKP_STRICT_MODE) {
class_alias('\APP\subscription\SubscriptionType', '\SubscriptionType');
foreach ([
'SUBSCRIPTION_TYPE_FORMAT_ONLINE',
'SUBSCRIPTION_TYPE_FORMAT_PRINT',
'SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE',
] as $constantName) {
define($constantName, constant('\SubscriptionType::' . $constantName));
}
}