first commit
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/subscription/form/PaymentTypesForm.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 PaymentTypesForm
|
||||
*
|
||||
* @ingroup subscription
|
||||
*
|
||||
* @brief Permit configuration of the various payment types.
|
||||
*/
|
||||
|
||||
namespace APP\subscription\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\journal\JournalDAO;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\form\Form;
|
||||
|
||||
class PaymentTypesForm extends Form
|
||||
{
|
||||
/** @var array the setting names */
|
||||
protected $settings;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('payments/paymentTypesForm.tpl');
|
||||
|
||||
$this->settings = [
|
||||
'publicationFee' => 'float',
|
||||
'purchaseArticleFeeEnabled' => 'bool',
|
||||
'purchaseArticleFee' => 'float',
|
||||
'purchaseIssueFeeEnabled' => 'bool',
|
||||
'purchaseIssueFee' => 'float',
|
||||
'membershipFee' => 'float',
|
||||
'restrictOnlyPdf' => 'bool',
|
||||
];
|
||||
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'publicationFee', 'optional', 'manager.payment.form.numeric', function ($publicationFee) {
|
||||
return is_numeric($publicationFee) && $publicationFee >= 0;
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'purchaseArticleFee', 'optional', 'manager.payment.form.numeric', function ($purchaseArticleFee) {
|
||||
return is_numeric($purchaseArticleFee) && $purchaseArticleFee >= 0;
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'purchaseIssueFee', 'optional', 'manager.payment.form.numeric', function ($purchaseIssueFee) {
|
||||
return is_numeric($purchaseIssueFee) && $purchaseIssueFee >= 0;
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'membershipFee', 'optional', 'manager.payment.form.numeric', function ($membershipFee) {
|
||||
return is_numeric($membershipFee) && $membershipFee >= 0;
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current group group.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
$journal = Application::get()->getRequest()->getContext();
|
||||
foreach (array_keys($this->settings) as $settingName) {
|
||||
$this->setData($settingName, $journal->getData($settingName));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(array_keys($this->settings));
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
parent::execute(...$functionArgs);
|
||||
$journal = Application::get()->getRequest()->getJournal();
|
||||
foreach (array_keys($this->settings) as $settingName) {
|
||||
$journal->setData($settingName, $this->getData($settingName));
|
||||
}
|
||||
$journalDao = DAORegistry::getDAO('JournalDAO'); /** @var JournalDAO $journalDao */
|
||||
$journalDao->updateObject($journal);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\APP\subscription\form\PaymentTypesForm', '\PaymentTypesForm');
|
||||
}
|
||||
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/subscription/form/SubscriptionForm.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 SubscriptionForm
|
||||
*
|
||||
* @ingroup subscription
|
||||
*
|
||||
* @brief Base form class for subscription create/edits.
|
||||
*/
|
||||
|
||||
namespace APP\subscription\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\facades\Repo;
|
||||
use APP\mail\mailables\SubscriptionNotify;
|
||||
use APP\subscription\Subscription;
|
||||
use APP\subscription\SubscriptionDAO;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use APP\template\TemplateManager;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\facades\Locale;
|
||||
use PKP\form\Form;
|
||||
|
||||
class SubscriptionForm extends Form
|
||||
{
|
||||
/** @var Subscription the subscription being created/edited */
|
||||
public $subscription;
|
||||
|
||||
/** @var int the user associated with the subscription */
|
||||
public $userId;
|
||||
|
||||
/** @var array of subscription types */
|
||||
public $subscriptionTypes;
|
||||
|
||||
/** @var array valid subscription status values */
|
||||
public $validStatus;
|
||||
|
||||
/** @var array valid user country values */
|
||||
public $validCountries;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string? $template Template to use for form presentation
|
||||
* @param int $subscriptionId The subscription ID for this subscription; null for new subscription
|
||||
*/
|
||||
public function __construct($template, $subscriptionId = null)
|
||||
{
|
||||
parent::__construct($template);
|
||||
|
||||
$subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
|
||||
|
||||
$this->subscription = null;
|
||||
$this->subscriptionTypes = null;
|
||||
|
||||
$this->validStatus = SubscriptionDAO::getStatusOptions();
|
||||
|
||||
$this->validCountries = [];
|
||||
foreach (Locale::getCountries() as $country) {
|
||||
$this->validCountries[$country->getAlpha2()] = $country->getLocalName();
|
||||
}
|
||||
asort($this->validCountries);
|
||||
|
||||
// User is provided and valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'userId', 'required', 'manager.subscriptions.form.userIdRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.userIdValid', fn ($userId) => !!Repo::user()->get($userId)));
|
||||
|
||||
// Subscription status is provided and valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'status', 'required', 'manager.subscriptions.form.statusRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'status', 'required', 'manager.subscriptions.form.statusValid', array_keys($this->validStatus)));
|
||||
// Subscription type is provided
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdRequired'));
|
||||
// Notify email flag is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorBoolean($this, 'notifyEmail', 'manager.subscriptions.form.notifyEmailValid'));
|
||||
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the form.
|
||||
*
|
||||
* @copydoc Form::fetch
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function fetch($request, $template = null, $display = false)
|
||||
{
|
||||
$templateMgr = TemplateManager::getManager($request);
|
||||
$templateMgr->assign([
|
||||
'subscriptionId' => $this->subscription ? $this->subscription->getId() : null,
|
||||
'yearOffsetPast' => Subscription::SUBSCRIPTION_YEAR_OFFSET_PAST,
|
||||
'yearOffsetFuture' => Subscription::SUBSCRIPTION_YEAR_OFFSET_FUTURE,
|
||||
'validStatus' => $this->validStatus,
|
||||
'subscriptionTypes' => $this->subscriptionTypes,
|
||||
]);
|
||||
return parent::fetch($request, $template, $display);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current subscription.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
if (isset($this->subscription)) {
|
||||
$subscription = $this->subscription;
|
||||
$this->_data = [
|
||||
'status' => $subscription->getStatus(),
|
||||
'userId' => $subscription->getUserId(),
|
||||
'typeId' => $subscription->getTypeId(),
|
||||
'dateStart' => $subscription->getDateStart(),
|
||||
'dateEnd' => $subscription->getDateEnd(),
|
||||
'membership' => $subscription->getMembership(),
|
||||
'referenceNumber' => $subscription->getReferenceNumber(),
|
||||
'notes' => $subscription->getNotes()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(['status', 'userId', 'typeId', 'membership', 'referenceNumber', 'notes', 'notifyEmail', 'dateStart', 'dateEnd']);
|
||||
|
||||
// If subscription type requires it, membership is provided
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->getData('typeId'));
|
||||
|
||||
if ($needMembership) {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'membership', 'required', 'manager.subscriptions.form.membershipRequired'));
|
||||
}
|
||||
|
||||
// If subscription type requires it, start and end dates are provided
|
||||
$subscriptionType = $subscriptionTypeDao->getById($this->getData('typeId'));
|
||||
$nonExpiring = $subscriptionType->getNonExpiring();
|
||||
|
||||
if (!$nonExpiring) {
|
||||
// Start date is provided and is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'dateStart', 'required', 'manager.subscriptions.form.dateStartRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateStart', 'required', 'manager.subscriptions.form.dateStartValid', function ($dateStart) {
|
||||
$dateStartYear = date('Y', strtotime($dateStart));
|
||||
$minYear = date('Y') + Subscription::SUBSCRIPTION_YEAR_OFFSET_PAST;
|
||||
$maxYear = date('Y') + Subscription::SUBSCRIPTION_YEAR_OFFSET_FUTURE;
|
||||
return ($dateStartYear >= $minYear && $dateStartYear <= $maxYear);
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateStart', 'required', 'manager.subscriptions.form.dateStartValid', function ($dateStart) {
|
||||
$dateStartMonth = date('m', strtotime($dateStart));
|
||||
return ($dateStartMonth >= 1 && $dateStartMonth <= 12);
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateStart', 'required', 'manager.subscriptions.form.dateStartValid', function ($dateStart) {
|
||||
$dateStartDay = date('d', strtotime($dateStart));
|
||||
return ($dateStartDay >= 1 && $dateStartDay <= 31);
|
||||
}));
|
||||
|
||||
// End date is provided and is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'dateEnd', 'required', 'manager.subscriptions.form.dateEndRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateEnd', 'required', 'manager.subscriptions.form.dateEndValid', function ($dateEnd) {
|
||||
$dateEndYear = date('Y', strtotime($dateEnd));
|
||||
$minYear = date('Y') + Subscription::SUBSCRIPTION_YEAR_OFFSET_PAST;
|
||||
$maxYear = date('Y') + Subscription::SUBSCRIPTION_YEAR_OFFSET_FUTURE;
|
||||
return ($dateEndYear >= $minYear && $dateEndYear <= $maxYear);
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateEnd', 'required', 'manager.subscriptions.form.dateEndValid', function ($dateEnd) {
|
||||
$dateEndMonth = date('m', strtotime($dateEnd));
|
||||
return ($dateEndMonth >= 1 && $dateEndMonth <= 12);
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateEnd', 'required', 'manager.subscriptions.form.dateEndValid', function ($dateEnd) {
|
||||
$dateEndDay = date('d', strtotime($dateEnd));
|
||||
return ($dateEndDay >= 1 && $dateEndDay <= 31);
|
||||
}));
|
||||
} else {
|
||||
// Is non-expiring; ensure that start/end dates weren't entered.
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateStart', 'optional', 'manager.subscriptions.form.dateStartEmpty', function ($dateStart) {
|
||||
return empty($dateStart);
|
||||
}));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'dateEnd', 'optional', 'manager.subscriptions.form.dateEndEmpty', function ($dateEnd) {
|
||||
return empty($dateEnd);
|
||||
}));
|
||||
}
|
||||
|
||||
// If notify email is requested, ensure subscription contact name and email exist.
|
||||
if ($this->getData('notifyEmail')) {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'notifyEmail', 'optional', 'manager.subscriptions.form.subscriptionContactRequired', function () {
|
||||
$request = Application::get()->getRequest();
|
||||
$journal = $request->getJournal();
|
||||
$subscriptionName = $journal->getData('subscriptionName');
|
||||
$subscriptionEmail = $journal->getData('subscriptionEmail');
|
||||
return $subscriptionName != '' && $subscriptionEmail != '';
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$request = Application::get()->getRequest();
|
||||
$journal = $request->getJournal();
|
||||
$subscription = & $this->subscription;
|
||||
|
||||
parent::execute(...$functionArgs);
|
||||
|
||||
$subscription->setJournalId($journal->getId());
|
||||
$subscription->setStatus($this->getData('status'));
|
||||
$subscription->setUserId($this->getData('userId'));
|
||||
$subscription->setTypeId($this->getData('typeId'));
|
||||
$subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
|
||||
$subscription->setReferenceNumber($this->getData('referenceNumber') ? $this->getData('referenceNumber') : null);
|
||||
$subscription->setNotes($this->getData('notes') ? $this->getData('notes') : null);
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
|
||||
if (!$subscriptionType->getNonExpiring()) {
|
||||
$subscription->setDateStart($this->getData('dateStart'));
|
||||
$dateEnd = strtotime($this->getData('dateEnd'));
|
||||
$subscription->setDateEnd(mktime(23, 59, 59, (int) date('m', $dateEnd), (int) date('d', $dateEnd), (int) date('Y', $dateEnd)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function to prepare notification email
|
||||
*/
|
||||
protected function _prepareNotificationEmail(): SubscriptionNotify
|
||||
{
|
||||
$request = Application::get()->getRequest();
|
||||
$context = $request->getJournal();
|
||||
$user = Repo::user()->get($this->subscription->getUserId());
|
||||
$subscriptionEmail = $context->getData('subscriptionEmail');
|
||||
$subscriptionName = $context->getData('subscriptionName');
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionType = $subscriptionTypeDao->getById($this->subscription->getTypeId(), $context->getId());
|
||||
|
||||
$template = Repo::emailTemplate()->getByKey($context->getId(), SubscriptionNotify::getEmailTemplateKey());
|
||||
$mailable = new SubscriptionNotify($context, $this->subscription, $subscriptionType);
|
||||
$mailable
|
||||
->recipients([$user])
|
||||
->from($subscriptionEmail, $subscriptionName)
|
||||
->subject($template->getLocalizedData('subject'))
|
||||
->body($template->getLocalizedData('body'));
|
||||
|
||||
return $mailable;
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\APP\subscription\form\SubscriptionForm', '\SubscriptionForm');
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/subscription/form/SubscriptionPolicyForm.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 SubscriptionPolicyForm
|
||||
*
|
||||
* @ingroup manager_form
|
||||
*
|
||||
* @brief Form for managers to setup subscription policies.
|
||||
*/
|
||||
|
||||
namespace APP\subscription\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\journal\JournalDAO;
|
||||
use APP\template\TemplateManager;
|
||||
use PKP\config\Config;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\form\Form;
|
||||
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MIN', '1');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MAX', '12');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MIN', '1');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MAX', '3');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MIN', '1');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MAX', '12');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MIN', '1');
|
||||
define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MAX', '3');
|
||||
|
||||
class SubscriptionPolicyForm extends Form
|
||||
{
|
||||
/** @var array keys are valid expiry reminder months */
|
||||
public $validNumMonthsBeforeExpiry;
|
||||
|
||||
/** @var array keys are valid expiry reminder weeks */
|
||||
public $validNumWeeksBeforeExpiry;
|
||||
|
||||
/** @var array keys are valid expiry reminder months */
|
||||
public $validNumMonthsAfterExpiry;
|
||||
|
||||
/** @var array keys are valid expiry reminder weeks */
|
||||
public $validNumWeeksAfterExpiry;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->validNumMonthsBeforeExpiry = [0 => __('common.disabled')];
|
||||
for ($i = SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MIN; $i <= SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MAX; $i++) {
|
||||
$this->validNumMonthsBeforeExpiry[$i] = __('manager.subscriptionPolicies.xMonths', ['x' => $i]);
|
||||
}
|
||||
|
||||
$this->validNumWeeksBeforeExpiry = [0 => __('common.disabled')];
|
||||
for ($i = SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MIN; $i <= SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MAX; $i++) {
|
||||
$this->validNumWeeksBeforeExpiry[$i] = __('manager.subscriptionPolicies.xWeeks', ['x' => $i]);
|
||||
}
|
||||
|
||||
$this->validNumMonthsAfterExpiry = [0 => __('common.disabled')];
|
||||
for ($i = SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MIN; $i <= SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MAX; $i++) {
|
||||
$this->validNumMonthsAfterExpiry[$i] = __('manager.subscriptionPolicies.xMonths', ['x' => $i]);
|
||||
}
|
||||
|
||||
$this->validNumWeeksAfterExpiry = [0 => __('common.disabled')];
|
||||
for ($i = SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MIN; $i <= SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MAX; $i++) {
|
||||
$this->validNumWeeksAfterExpiry[$i] = __('manager.subscriptionPolicies.xWeeks', ['x' => $i]);
|
||||
}
|
||||
|
||||
parent::__construct('payments/subscriptionPolicyForm.tpl');
|
||||
|
||||
// If provided, subscription contact email is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorEmail($this, 'subscriptionEmail', 'optional', 'manager.subscriptionPolicies.subscriptionContactEmailValid'));
|
||||
|
||||
// If provided expiry reminder months before value is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'numMonthsBeforeSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numMonthsBeforeSubscriptionExpiryReminderValid', array_keys($this->validNumMonthsBeforeExpiry)));
|
||||
|
||||
// If provided expiry reminder weeks before value is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'numWeeksBeforeSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numWeeksBeforeSubscriptionExpiryReminderValid', array_keys($this->validNumWeeksBeforeExpiry)));
|
||||
|
||||
// If provided expiry reminder months after value is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'numMonthsAfterSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numMonthsAfterSubscriptionExpiryReminderValid', array_keys($this->validNumMonthsAfterExpiry)));
|
||||
|
||||
// If provided expiry reminder weeks after value is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'numWeeksAfterSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numWeeksAfterSubscriptionExpiryReminderValid', array_keys($this->validNumWeeksAfterExpiry)));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::fetch()
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function fetch($request, $template = null, $display = false)
|
||||
{
|
||||
$paymentManager = Application::getPaymentManager($request->getContext());
|
||||
$templateMgr = TemplateManager::getManager();
|
||||
$templateMgr->assign([
|
||||
'validNumMonthsBeforeExpiry' => $this->validNumMonthsBeforeExpiry,
|
||||
'validNumWeeksBeforeExpiry' => $this->validNumWeeksBeforeExpiry,
|
||||
'validNumMonthsAfterExpiry' => $this->validNumMonthsAfterExpiry,
|
||||
'validNumWeeksAfterExpiry' => $this->validNumWeeksAfterExpiry,
|
||||
'scheduledTasksEnabled' => (bool) Config::getVar('general', 'scheduled_tasks'),
|
||||
'paymentsEnabled' => $paymentManager->isConfigured(),
|
||||
]);
|
||||
|
||||
return parent::fetch($request, $template, $display);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current subscription policies.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
$request = Application::get()->getRequest();
|
||||
$journal = $request->getJournal();
|
||||
$this->_data = [
|
||||
'subscriptionName' => $journal->getData('subscriptionName'),
|
||||
'subscriptionEmail' => $journal->getData('subscriptionEmail'),
|
||||
'subscriptionPhone' => $journal->getData('subscriptionPhone'),
|
||||
'subscriptionMailingAddress' => $journal->getData('subscriptionMailingAddress'),
|
||||
'subscriptionAdditionalInformation' => $journal->getData('subscriptionAdditionalInformation'),
|
||||
'enableOpenAccessNotification' => $journal->getData('enableOpenAccessNotification'),
|
||||
'subscriptionExpiryPartial' => $journal->getData('subscriptionExpiryPartial'),
|
||||
'enableSubscriptionOnlinePaymentNotificationPurchaseIndividual' => $journal->getData('enableSubscriptionOnlinePaymentNotificationPurchaseIndividual'),
|
||||
'enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional' => $journal->getData('enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional'),
|
||||
'enableSubscriptionOnlinePaymentNotificationRenewIndividual' => $journal->getData('enableSubscriptionOnlinePaymentNotificationRenewIndividual'),
|
||||
'enableSubscriptionOnlinePaymentNotificationRenewInstitutional' => $journal->getData('enableSubscriptionOnlinePaymentNotificationRenewInstitutional'),
|
||||
'numMonthsBeforeSubscriptionExpiryReminder' => $journal->getData('numMonthsBeforeSubscriptionExpiryReminder'),
|
||||
'numWeeksBeforeSubscriptionExpiryReminder' => $journal->getData('numWeeksBeforeSubscriptionExpiryReminder'),
|
||||
'numMonthsAfterSubscriptionExpiryReminder' => $journal->getData('numMonthsAfterSubscriptionExpiryReminder'),
|
||||
'numWeeksAfterSubscriptionExpiryReminder' => $journal->getData('numWeeksAfterSubscriptionExpiryReminder'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(['subscriptionName', 'subscriptionEmail', 'subscriptionPhone', 'subscriptionMailingAddress', 'subscriptionAdditionalInformation', 'enableOpenAccessNotification', 'subscriptionExpiryPartial', 'enableSubscriptionOnlinePaymentNotificationPurchaseIndividual', 'enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional', 'enableSubscriptionOnlinePaymentNotificationRenewIndividual', 'enableSubscriptionOnlinePaymentNotificationRenewInstitutional', 'numMonthsBeforeSubscriptionExpiryReminder', 'numWeeksBeforeSubscriptionExpiryReminder', 'numWeeksAfterSubscriptionExpiryReminder', 'numMonthsAfterSubscriptionExpiryReminder']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the names of the fields for which localized settings are used
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLocaleFieldNames()
|
||||
{
|
||||
return ['subscriptionAdditionalInformation'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$request = Application::get()->getRequest();
|
||||
$journal = $request->getJournal();
|
||||
|
||||
$journal->setData('subscriptionName', $this->getData('subscriptionName'));
|
||||
$journal->setData('subscriptionEmail', $this->getData('subscriptionEmail'));
|
||||
$journal->setData('subscriptionPhone', $this->getData('subscriptionPhone'));
|
||||
$journal->setData('subscriptionMailingAddress', $this->getData('subscriptionMailingAddress'));
|
||||
$journal->setData('subscriptionAdditionalInformation', $this->getData('subscriptionAdditionalInformation')); // Localized
|
||||
$journal->setData('enableOpenAccessNotification', $this->getData('enableOpenAccessNotification') == null ? 0 : $this->getData('enableOpenAccessNotification'));
|
||||
$journal->setData('subscriptionExpiryPartial', $this->getData('subscriptionExpiryPartial') == null ? 0 : $this->getData('subscriptionExpiryPartial'));
|
||||
$journal->setData('enableSubscriptionOnlinePaymentNotificationPurchaseIndividual', $this->getData('enableSubscriptionOnlinePaymentNotificationPurchaseIndividual') == null ? 0 : $this->getData('enableSubscriptionOnlinePaymentNotificationPurchaseIndividual'));
|
||||
$journal->setData('enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional', $this->getData('enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional') == null ? 0 : $this->getData('enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional'));
|
||||
$journal->setData('enableSubscriptionOnlinePaymentNotificationRenewIndividual', $this->getData('enableSubscriptionOnlinePaymentNotificationRenewIndividual') == null ? 0 : $this->getData('enableSubscriptionOnlinePaymentNotificationRenewIndividual'));
|
||||
$journal->setData('enableSubscriptionOnlinePaymentNotificationRenewInstitutional', $this->getData('enableSubscriptionOnlinePaymentNotificationRenewInstitutional') == null ? 0 : $this->getData('enableSubscriptionOnlinePaymentNotificationRenewInstitutional'));
|
||||
$journal->setData('numMonthsBeforeSubscriptionExpiryReminder', $this->getData('numMonthsBeforeSubscriptionExpiryReminder'));
|
||||
$journal->setData('numWeeksBeforeSubscriptionExpiryReminder', $this->getData('numWeeksBeforeSubscriptionExpiryReminder'));
|
||||
$journal->setData('numMonthsAfterSubscriptionExpiryReminder', $this->getData('numMonthsAfterSubscriptionExpiryReminder'));
|
||||
$journal->setData('numWeeksAfterSubscriptionExpiryReminder', $this->getData('numWeeksAfterSubscriptionExpiryReminder'));
|
||||
|
||||
parent::execute(...$functionArgs);
|
||||
|
||||
$journalDao = DAORegistry::getDAO('JournalDAO'); /** @var JournalDAO $journalDao */
|
||||
$journalDao->updateObject($journal);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\APP\subscription\form\SubscriptionPolicyForm', '\SubscriptionPolicyForm');
|
||||
}
|
||||
@@ -0,0 +1,210 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/subscription/form/UserIndividualSubscriptionForm.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 UserIndividualSubscriptionForm
|
||||
*
|
||||
* @ingroup subscription
|
||||
*
|
||||
* @brief Form class for user purchase of individual subscription.
|
||||
*/
|
||||
|
||||
namespace APP\subscription\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\core\Request;
|
||||
use APP\payment\ojs\OJSPaymentManager;
|
||||
use APP\subscription\IndividualSubscription;
|
||||
use APP\subscription\IndividualSubscriptionDAO;
|
||||
use APP\subscription\Subscription;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use APP\template\TemplateManager;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\form\Form;
|
||||
|
||||
class UserIndividualSubscriptionForm extends Form
|
||||
{
|
||||
/** @var Request */
|
||||
public $request;
|
||||
|
||||
/** @var int userId int the user associated with the subscription */
|
||||
public $userId;
|
||||
|
||||
/** @var IndividualSubscription subscription the subscription being purchased */
|
||||
public $subscription;
|
||||
|
||||
/** @var array Subscription types */
|
||||
public $subscriptionTypes;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $userId
|
||||
* @param int $subscriptionId
|
||||
*/
|
||||
public function __construct($request, $userId = null, $subscriptionId = null)
|
||||
{
|
||||
parent::__construct('frontend/pages/purchaseIndividualSubscription.tpl');
|
||||
|
||||
$this->userId = isset($userId) ? (int) $userId : null;
|
||||
$this->subscription = null;
|
||||
$this->request = $request;
|
||||
|
||||
$subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
|
||||
|
||||
if (isset($subscriptionId)) {
|
||||
$subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */
|
||||
if ($subscriptionDao->subscriptionExists($subscriptionId)) {
|
||||
$this->subscription = $subscriptionDao->getById($subscriptionId);
|
||||
}
|
||||
}
|
||||
|
||||
$journal = $this->request->getJournal();
|
||||
$journalId = $journal->getId();
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionTypes = $subscriptionTypeDao->getByInstitutional($journalId, false, false);
|
||||
$this->subscriptionTypes = $subscriptionTypes->toAssociativeArray();
|
||||
|
||||
// Ensure subscription type is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'typeId', 'required', 'user.subscriptions.form.typeIdValid', function ($typeId) use ($journalId) {
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
return $subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && !$subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId) && !$subscriptionTypeDao->getSubscriptionTypeDisablePublicDisplay($typeId);
|
||||
}));
|
||||
|
||||
// Ensure that user does not already have a subscription for this journal
|
||||
if (!isset($subscriptionId)) {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'userId', 'required', 'user.subscriptions.form.subscriptionExists', [DAORegistry::getDAO('IndividualSubscriptionDAO'), 'subscriptionExistsByUserForJournal'], [$journalId], true));
|
||||
} else {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'userId', 'required', 'user.subscriptions.form.subscriptionExists', function ($userId) use ($journalId, $subscriptionId) {
|
||||
$subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */
|
||||
$checkId = $subscriptionDao->getByUserIdForJournal($userId, $journalId);
|
||||
return ($checkId == 0 || $checkId == $subscriptionId) ? true : false;
|
||||
}));
|
||||
}
|
||||
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current subscription.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
if (isset($this->subscription)) {
|
||||
$subscription = $this->subscription;
|
||||
|
||||
$this->_data = [
|
||||
'typeId' => $subscription->getTypeId(),
|
||||
'membership' => $subscription->getMembership()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::display
|
||||
*
|
||||
* @param null|mixed $request
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function display($request = null, $template = null)
|
||||
{
|
||||
if (is_null($request)) {
|
||||
$request = $this->request;
|
||||
}
|
||||
$templateMgr = TemplateManager::getManager($this->request);
|
||||
$templateMgr->assign([
|
||||
'subscriptionId' => $this->subscription ? $this->subscription->getId() : null,
|
||||
'subscriptionTypes' => array_map(
|
||||
function ($subscriptionType) {
|
||||
return $subscriptionType->getLocalizedName() . ' (' . $subscriptionType->getCost() . ' ' . $subscriptionType->getCurrencyCodeAlpha() . ')';
|
||||
},
|
||||
$this->subscriptionTypes
|
||||
),
|
||||
]);
|
||||
parent::display($request, $template);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(['typeId', 'membership']);
|
||||
|
||||
// If subscription type requires it, membership is provided
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->getData('typeId'));
|
||||
|
||||
if ($needMembership) {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'membership', 'required', 'user.subscriptions.form.membershipRequired'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$journal = $this->request->getJournal();
|
||||
$journalId = $journal->getId();
|
||||
$typeId = $this->getData('typeId');
|
||||
$individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $individualSubscriptionDao */
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionType = $subscriptionTypeDao->getById($typeId, $journalId);
|
||||
$nonExpiring = $subscriptionType->getNonExpiring();
|
||||
$today = date('Y-m-d');
|
||||
$insert = false;
|
||||
|
||||
parent::execute(...$functionArgs);
|
||||
|
||||
if (!isset($this->subscription)) {
|
||||
$subscription = $individualSubscriptionDao->newDataObject();
|
||||
$subscription->setJournalId($journalId);
|
||||
$subscription->setUserId($this->userId);
|
||||
$subscription->setReferenceNumber(null);
|
||||
$subscription->setNotes(null);
|
||||
|
||||
$insert = true;
|
||||
} else {
|
||||
$subscription = $this->subscription;
|
||||
}
|
||||
|
||||
$paymentManager = Application::getPaymentManager($journal);
|
||||
$paymentPlugin = $paymentManager->getPaymentPlugin();
|
||||
|
||||
if ($paymentPlugin->getName() == 'ManualPayment') {
|
||||
$subscription->setStatus(Subscription::SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT);
|
||||
} else {
|
||||
$subscription->setStatus(Subscription::SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
|
||||
}
|
||||
|
||||
$subscription->setTypeId($typeId);
|
||||
$subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
|
||||
$subscription->setDateStart($nonExpiring ? null : $today);
|
||||
$subscription->setDateEnd($nonExpiring ? null : $today);
|
||||
|
||||
if ($subscription->getId()) {
|
||||
$individualSubscriptionDao->updateObject($subscription);
|
||||
} else {
|
||||
$individualSubscriptionDao->insertObject($subscription);
|
||||
}
|
||||
|
||||
$queuedPayment = $paymentManager->createQueuedPayment($this->request, OJSPaymentManager::PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $this->userId, $subscription->getId(), $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
|
||||
$paymentManager->queuePayment($queuedPayment);
|
||||
|
||||
$paymentForm = $paymentManager->getPaymentForm($queuedPayment);
|
||||
$paymentForm->display($this->request);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\APP\subscription\form\UserIndividualSubscriptionForm', '\UserIndividualSubscriptionForm');
|
||||
}
|
||||
@@ -0,0 +1,245 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/subscription/form/UserInstitutionalSubscriptionForm.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 UserInstitutionalSubscriptionForm
|
||||
*
|
||||
* @ingroup subscription
|
||||
*
|
||||
* @brief Form class for user purchase of institutional subscription.
|
||||
*/
|
||||
|
||||
namespace APP\subscription\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\core\Request;
|
||||
use APP\facades\Repo;
|
||||
use APP\payment\ojs\OJSPaymentManager;
|
||||
use APP\subscription\InstitutionalSubscription;
|
||||
use APP\subscription\InstitutionalSubscriptionDAO;
|
||||
use APP\subscription\Subscription;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use APP\template\TemplateManager;
|
||||
use PKP\core\PKPString;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\facades\Locale;
|
||||
use PKP\form\Form;
|
||||
use PKP\institution\Institution;
|
||||
|
||||
class UserInstitutionalSubscriptionForm extends Form
|
||||
{
|
||||
/** @var Request */
|
||||
public $request;
|
||||
|
||||
/** @var int userId the user associated with the subscription */
|
||||
public $userId;
|
||||
|
||||
/** @var InstitutionalSubscription the subscription being purchased */
|
||||
public $subscription;
|
||||
|
||||
/** @var array subscription types */
|
||||
public $subscriptionTypes;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $userId
|
||||
* @param int $subscriptionId
|
||||
*/
|
||||
public function __construct($request, $userId = null, $subscriptionId = null)
|
||||
{
|
||||
parent::__construct('frontend/pages/purchaseInstitutionalSubscription.tpl');
|
||||
|
||||
$this->userId = isset($userId) ? (int) $userId : null;
|
||||
$this->subscription = null;
|
||||
$this->request = $request;
|
||||
|
||||
$subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
|
||||
|
||||
if (isset($subscriptionId)) {
|
||||
$subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /** @var InstitutionalSubscriptionDAO $subscriptionDao */
|
||||
if ($subscriptionDao->subscriptionExists($subscriptionId)) {
|
||||
$this->subscription = $subscriptionDao->getById($subscriptionId);
|
||||
}
|
||||
}
|
||||
|
||||
$journal = $this->request->getJournal();
|
||||
$journalId = $journal->getId();
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionTypes = $subscriptionTypeDao->getByInstitutional($journalId, true, false);
|
||||
$this->subscriptionTypes = $subscriptionTypes->toArray();
|
||||
|
||||
// Ensure subscription type is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'typeId', 'required', 'user.subscriptions.form.typeIdValid', function ($typeId) use ($journalId) {
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
return $subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && $subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId) && !$subscriptionTypeDao->getSubscriptionTypeDisablePublicDisplay($typeId);
|
||||
}));
|
||||
|
||||
// Ensure institution name is provided
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'institutionName', 'required', 'user.subscriptions.form.institutionNameRequired'));
|
||||
|
||||
// If provided, domain is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorRegExp($this, 'domain', 'optional', 'user.subscriptions.form.domainValid', '/^' .
|
||||
'[A-Z0-9]+([\-_\.][A-Z0-9]+)*' .
|
||||
'\.' .
|
||||
'[A-Z]{2,4}' .
|
||||
'$/i'));
|
||||
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current subscription.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
if (isset($this->subscription)) {
|
||||
$subscription = $this->subscription;
|
||||
$institution = Repo::institution()->get($this->subscription->getInstitutionId());
|
||||
$this->_data = [
|
||||
'institutionName' => $institution->getLocalizedName(),
|
||||
'institutionMailingAddress' => $subscription->getInstitutionMailingAddress(),
|
||||
'domain' => $subscription->getDomain(),
|
||||
'ipRanges' => $institution->getIPRanges()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::display
|
||||
*
|
||||
* @param null|mixed $request
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function display($request = null, $template = null)
|
||||
{
|
||||
if (is_null($request)) {
|
||||
$request = $this->request;
|
||||
}
|
||||
$templateMgr = TemplateManager::getManager($this->request);
|
||||
$templateMgr->assign([
|
||||
'subscriptionId' => $this->subscription ? $this->subscription->getId() : null,
|
||||
'subscriptionTypes' => $this->subscriptionTypes,
|
||||
]);
|
||||
parent::display($request, $template);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(['typeId', 'membership', 'institutionName', 'institutionMailingAddress', 'domain', 'ipRanges']);
|
||||
|
||||
// If subscription type requires it, membership is provided
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->getData('typeId'));
|
||||
|
||||
if ($needMembership) {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'membership', 'required', 'user.subscriptions.form.membershipRequired'));
|
||||
}
|
||||
|
||||
// Check if IP range has been provided
|
||||
$ipRanges = $this->getData('ipRanges');
|
||||
$ipRangeProvided = !empty(trim($ipRanges));
|
||||
|
||||
// Domain or at least one IP range has been provided
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'domain', 'required', 'user.subscriptions.form.domainIPRangeRequired', function ($domain) use ($ipRangeProvided) {
|
||||
return ($domain != '' || $ipRangeProvided) ? true : false;
|
||||
}));
|
||||
|
||||
// If provided ensure IP ranges have IP address format; IP addresses may contain wildcards
|
||||
if ($ipRangeProvided) {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'ipRanges', 'required', 'manager.subscriptions.form.ipRangeValid', function ($ipRanges) {
|
||||
foreach (explode("\r\n", trim($ipRanges)) as $ipRange) {
|
||||
if (!PKPString::regexp_match(
|
||||
'/^' .
|
||||
// IP4 address (with or w/o wildcards) or IP4 address range (with or w/o wildcards) or CIDR IP4 address
|
||||
'((([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . Institution::IP_RANGE_WILDCARD . '])([.]([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . Institution::IP_RANGE_WILDCARD . '])){3}((\s)*[' . Institution::IP_RANGE_RANGE . '](\s)*([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . Institution::IP_RANGE_WILDCARD . '])([.]([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . Institution::IP_RANGE_WILDCARD . '])){3}){0,1})|(([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])([.]([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])){3}([\/](([3][0-2]{0,1})|([1-2]{0,1}[0-9])))))' .
|
||||
'$/i',
|
||||
trim($ipRange)
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute()
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$journal = $this->request->getJournal();
|
||||
$journalId = $journal->getId();
|
||||
$typeId = $this->getData('typeId');
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$institutionalSubscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /** @var InstitutionalSubscriptionDAO $institutionalSubscriptionDao */
|
||||
$subscriptionType = $subscriptionTypeDao->getById($typeId);
|
||||
$nonExpiring = $subscriptionType->getNonExpiring();
|
||||
$today = date('Y-m-d');
|
||||
|
||||
if (!isset($this->subscription)) {
|
||||
$subscription = $institutionalSubscriptionDao->newDataObject();
|
||||
$subscription->setJournalId($journalId);
|
||||
$subscription->setUserId($this->userId);
|
||||
$subscription->setReferenceNumber(null);
|
||||
$subscription->setNotes(null);
|
||||
} else {
|
||||
$subscription = $this->subscription;
|
||||
}
|
||||
|
||||
$paymentManager = Application::getPaymentManager($journal);
|
||||
$paymentPlugin = $paymentManager->getPaymentPlugin();
|
||||
|
||||
if ($paymentPlugin->getName() == 'ManualPayment') {
|
||||
$subscription->setStatus(Subscription::SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT);
|
||||
} else {
|
||||
$subscription->setStatus(Subscription::SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
|
||||
}
|
||||
|
||||
$subscription->setTypeId($typeId);
|
||||
$subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
|
||||
$subscription->setDateStart($nonExpiring ? null : $today);
|
||||
$subscription->setDateEnd($nonExpiring ? null : $today);
|
||||
$subscription->setInstitutionMailingAddress($this->getData('institutionMailingAddress'));
|
||||
$subscription->setDomain($this->getData('domain'));
|
||||
|
||||
$institution = Repo::institution()->newDataObject();
|
||||
$institution->setContextId($journalId);
|
||||
$institution->setName($this->getData('institutionName'), Locale::getLocale());
|
||||
$ipRanges = $this->getData('ipRanges');
|
||||
$ipRanges = explode("\r\n", trim($ipRanges));
|
||||
$institution->setIPRanges($ipRanges);
|
||||
$institutionId = Repo::institution()->add($institution);
|
||||
$subscription->setInstitutionId($institutionId);
|
||||
|
||||
if ($subscription->getId()) {
|
||||
$institutionalSubscriptionDao->updateObject($subscription);
|
||||
} else {
|
||||
$institutionalSubscriptionDao->insertObject($subscription);
|
||||
}
|
||||
|
||||
$queuedPayment = $paymentManager->createQueuedPayment($this->request, OJSPaymentManager::PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $this->userId, $subscription->getId(), $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
|
||||
$paymentManager->queuePayment($queuedPayment);
|
||||
|
||||
$paymentForm = $paymentManager->getPaymentForm($queuedPayment);
|
||||
$paymentForm->display($this->request);
|
||||
parent::execute(...$functionArgs);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\APP\subscription\form\UserInstitutionalSubscriptionForm', '\UserInstitutionalSubscriptionForm');
|
||||
}
|
||||
Reference in New Issue
Block a user