133 lines
3.3 KiB
PHP
133 lines
3.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/payment/PaymentManager.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 PaymentManager
|
|
*
|
|
* @ingroup payment
|
|
*
|
|
* @see Payment
|
|
*
|
|
* @brief Provides payment management functions.
|
|
*
|
|
*/
|
|
|
|
namespace PKP\payment;
|
|
|
|
use Exception;
|
|
use PKP\context\Context;
|
|
use PKP\db\DAORegistry;
|
|
|
|
abstract class PaymentManager
|
|
{
|
|
public const PAYMENT_TYPE_PUBLICATION = 7; // FIXME: This is OJS-only but referred to in pkp-lib. Move back to OJS.
|
|
|
|
/** @var Context */
|
|
public $_context;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param Context $context
|
|
*/
|
|
public function __construct($context)
|
|
{
|
|
$this->_context = $context;
|
|
}
|
|
|
|
/**
|
|
* Queue a payment for receipt.
|
|
*
|
|
* @param object $queuedPayment
|
|
* @param string $expiryDate optional
|
|
*
|
|
* @return mixed Queued payment ID for new payment, or false if fails
|
|
*/
|
|
public function queuePayment($queuedPayment, $expiryDate = null)
|
|
{
|
|
if (!$this->isConfigured()) {
|
|
return false;
|
|
}
|
|
|
|
$queuedPaymentDao = DAORegistry::getDAO('QueuedPaymentDAO'); /** @var QueuedPaymentDAO $queuedPaymentDao */
|
|
$queuedPaymentId = $queuedPaymentDao->insertObject($queuedPayment, $expiryDate);
|
|
|
|
// Perform periodic cleanup
|
|
if (time() % 100 == 0) {
|
|
$queuedPaymentDao->deleteExpired();
|
|
}
|
|
|
|
return $queuedPaymentId;
|
|
}
|
|
|
|
/**
|
|
* Abstract method for fetching the payment plugin
|
|
*
|
|
* @return \PKP\plugins\PaymethodPlugin
|
|
*/
|
|
abstract public function getPaymentPlugin();
|
|
|
|
/**
|
|
* Check if there is a payment plugin and if is configured
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isConfigured()
|
|
{
|
|
$paymentPlugin = $this->getPaymentPlugin();
|
|
if ($paymentPlugin !== null) {
|
|
return $paymentPlugin->isConfigured($this->_context);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get the payment form for the configured payment plugin and specified payment.
|
|
*
|
|
* @param QueuedPayment $queuedPayment
|
|
*
|
|
* @return \PKP\form\Form
|
|
*/
|
|
public function getPaymentForm($queuedPayment)
|
|
{
|
|
$paymentPlugin = $this->getPaymentPlugin();
|
|
if ($paymentPlugin !== null && $paymentPlugin->isConfigured($this->_context)) {
|
|
return $paymentPlugin->getPaymentForm($this->_context, $queuedPayment);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Fetch a queued payment
|
|
*
|
|
* @param int $queuedPaymentId
|
|
*
|
|
* @return QueuedPayment
|
|
*/
|
|
public function getQueuedPayment($queuedPaymentId)
|
|
{
|
|
$queuedPaymentDao = DAORegistry::getDAO('QueuedPaymentDAO'); /** @var QueuedPaymentDAO $queuedPaymentDao */
|
|
$queuedPayment = $queuedPaymentDao->getById($queuedPaymentId);
|
|
return $queuedPayment;
|
|
}
|
|
|
|
/**
|
|
* Fulfill a queued payment
|
|
*
|
|
* @param \PKP\core\PKPRequest $request
|
|
* @param QueuedPayment $queuedPayment
|
|
*
|
|
* @return bool success/failure
|
|
*/
|
|
abstract public function fulfillQueuedPayment($request, $queuedPayment);
|
|
}
|
|
|
|
if (!PKP_STRICT_MODE) {
|
|
class_alias('\PKP\payment\PaymentManager', '\PaymentManager');
|
|
}
|