first commit
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/IndividualSubscriptionForm.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 IndividualSubscriptionForm
|
||||
*
|
||||
* @ingroup subscription
|
||||
*
|
||||
* @brief Form class for individual subscription create/edits.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\core\Request;
|
||||
use APP\notification\NotificationManager;
|
||||
use APP\subscription\form\SubscriptionForm;
|
||||
use APP\subscription\IndividualSubscription;
|
||||
use APP\subscription\IndividualSubscriptionDAO;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\notification\PKPNotification;
|
||||
|
||||
class IndividualSubscriptionForm extends SubscriptionForm
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $subscriptionId leave as default for new subscription
|
||||
*/
|
||||
public function __construct($request, $subscriptionId = null)
|
||||
{
|
||||
parent::__construct('payments/individualSubscriptionForm.tpl', $subscriptionId);
|
||||
|
||||
$subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
|
||||
$journal = $request->getJournal();
|
||||
$journalId = $journal->getId();
|
||||
|
||||
if (isset($subscriptionId)) {
|
||||
$subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */
|
||||
if ($subscriptionDao->subscriptionExists($subscriptionId)) {
|
||||
$this->subscription = $subscriptionDao->getById($subscriptionId);
|
||||
}
|
||||
}
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionTypeIterator = $subscriptionTypeDao->getByInstitutional($journalId, false);
|
||||
$this->subscriptionTypes = [];
|
||||
while ($subscriptionType = $subscriptionTypeIterator->next()) {
|
||||
$this->subscriptionTypes[$subscriptionType->getId()] = $subscriptionType->getSummaryString();
|
||||
}
|
||||
|
||||
if (count($this->subscriptionTypes) == 0) {
|
||||
$this->addError('typeId', __('manager.subscriptions.form.typeRequired'));
|
||||
$this->addErrorField('typeId');
|
||||
}
|
||||
|
||||
// Ensure subscription type is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdValid', function ($typeId) use ($journalId) {
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
return $subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && !$subscriptionTypeDao->getSubscriptionTypeInstitutional($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', 'manager.subscriptions.form.subscriptionExists', [DAORegistry::getDAO('IndividualSubscriptionDAO'), 'subscriptionExistsByUserForJournal'], [$journalId], true));
|
||||
} else {
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.subscriptionExists', function ($userId) use ($journalId, $subscriptionId) {
|
||||
$subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */
|
||||
$checkSubscription = $subscriptionDao->getByUserIdForJournal($userId, $journalId);
|
||||
return (!$checkSubscription || $checkSubscription->getId() == $subscriptionId) ? true : false;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute()
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$insert = false;
|
||||
if (!isset($this->subscription)) {
|
||||
$this->subscription = new IndividualSubscription();
|
||||
$insert = true;
|
||||
}
|
||||
|
||||
parent::execute(...$functionArgs);
|
||||
$individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $individualSubscriptionDao */
|
||||
|
||||
if ($insert) {
|
||||
$individualSubscriptionDao->insertObject($this->subscription);
|
||||
} else {
|
||||
$individualSubscriptionDao->updateObject($this->subscription);
|
||||
}
|
||||
|
||||
// Send notification email
|
||||
if ($this->getData('notifyEmail')) {
|
||||
$mailable = $this->_prepareNotificationEmail();
|
||||
try {
|
||||
Mail::send($mailable);
|
||||
} catch (Exception $e) {
|
||||
$notificationMgr = new NotificationManager();
|
||||
$request = Application::get()->getRequest();
|
||||
$notificationMgr->createTrivialNotification($request->getUser()->getId(), PKPNotification::NOTIFICATION_TYPE_ERROR, ['contents' => __('email.compose.error')]);
|
||||
error_log($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/IndividualSubscriptionsGridHandler.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 IndividualSubscriptionsGridHandler
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Handle subscription grid requests.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Request;
|
||||
use APP\facades\Repo;
|
||||
use APP\notification\NotificationManager;
|
||||
use APP\subscription\IndividualSubscriptionDAO;
|
||||
use APP\subscription\SubscriptionDAO;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
use PKP\core\JSONMessage;
|
||||
use PKP\db\DAO;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\identity\Identity;
|
||||
use PKP\notification\PKPNotification;
|
||||
|
||||
class IndividualSubscriptionsGridHandler extends SubscriptionsGridHandler
|
||||
{
|
||||
/**
|
||||
* @copydoc SubscriptionsGridHandler::initialize()
|
||||
*
|
||||
* @param null|mixed $args
|
||||
*/
|
||||
public function initialize($request, $args = null)
|
||||
{
|
||||
parent::initialize($request, $args);
|
||||
|
||||
// Basic grid configuration.
|
||||
$this->setTitle('subscriptionManager.individualSubscriptions');
|
||||
|
||||
//
|
||||
// Grid columns.
|
||||
//
|
||||
$cellProvider = new SubscriptionsGridCellProvider();
|
||||
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'name',
|
||||
'common.name',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'email',
|
||||
'user.email',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'subscriptionType',
|
||||
'manager.subscriptions.subscriptionType',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'status',
|
||||
'manager.subscriptions.form.status',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'dateStart',
|
||||
'manager.subscriptions.dateStart',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'dateEnd',
|
||||
'manager.subscriptions.dateEnd',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'referenceNumber',
|
||||
'manager.subscriptions.referenceNumber',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Implement methods from GridHandler.
|
||||
//
|
||||
/**
|
||||
* @copydoc GridHandler::renderFilter()
|
||||
*/
|
||||
public function renderFilter($request, $filterData = [])
|
||||
{
|
||||
$userDao = Repo::user()->dao;
|
||||
return parent::renderFilter($request, array_merge_recursive(
|
||||
$filterData,
|
||||
[
|
||||
'fieldOptions' => [
|
||||
Identity::IDENTITY_SETTING_GIVENNAME => 'user.givenName',
|
||||
Identity::IDENTITY_SETTING_FAMILYNAME => 'user.familyName',
|
||||
$userDao::USER_FIELD_USERNAME => 'user.username',
|
||||
$userDao::USER_FIELD_EMAIL => 'user.email',
|
||||
SubscriptionDAO::SUBSCRIPTION_MEMBERSHIP => 'user.subscriptions.form.membership',
|
||||
SubscriptionDAO::SUBSCRIPTION_REFERENCE_NUMBER => 'manager.subscriptions.form.referenceNumber',
|
||||
SubscriptionDAO::SUBSCRIPTION_NOTES => 'manager.subscriptions.form.notes',
|
||||
],
|
||||
'matchOptions' => [
|
||||
'contains' => 'form.contains',
|
||||
'is' => 'form.is'
|
||||
]
|
||||
]
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::loadData()
|
||||
*/
|
||||
protected function loadData($request, $filter)
|
||||
{
|
||||
// Get the context.
|
||||
$journal = $request->getContext();
|
||||
|
||||
$subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */
|
||||
$rangeInfo = $this->getGridRangeInfo($request, $this->getId());
|
||||
return $subscriptionDao->getByJournalId($journal->getId(), null, $filter['searchField'], $filter['searchMatch'], $filter['search'] ? $filter['search'] : null, null, null, null, $rangeInfo);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Public grid actions.
|
||||
//
|
||||
/**
|
||||
* Edit an existing subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function editSubscription($args, $request)
|
||||
{
|
||||
// Form handling.
|
||||
$subscriptionForm = new IndividualSubscriptionForm($request, $request->getUserVar('rowId'));
|
||||
$subscriptionForm->initData();
|
||||
|
||||
return new JSONMessage(true, $subscriptionForm->fetch($request));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function updateSubscription($args, $request)
|
||||
{
|
||||
$subscriptionId = $request->getUserVar('subscriptionId');
|
||||
// Form handling.
|
||||
$subscriptionForm = new IndividualSubscriptionForm($request, $subscriptionId);
|
||||
$subscriptionForm->readInputData();
|
||||
|
||||
if ($subscriptionForm->validate()) {
|
||||
$subscriptionForm->execute();
|
||||
$notificationManager = new NotificationManager();
|
||||
$notificationManager->createTrivialNotification($request->getUser()->getId(), PKPNotification::NOTIFICATION_TYPE_SUCCESS);
|
||||
// Prepare the grid row data.
|
||||
return DAO::getDataChangedEvent($subscriptionId);
|
||||
} else {
|
||||
return new JSONMessage(true, $subscriptionForm->fetch($request));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function deleteSubscription($args, $request)
|
||||
{
|
||||
if (!$request->checkCSRF()) {
|
||||
return new JSONMessage(false);
|
||||
}
|
||||
|
||||
$context = $request->getContext();
|
||||
$user = $request->getUser();
|
||||
|
||||
// Identify the subscription ID.
|
||||
$subscriptionId = $request->getUserVar('rowId');
|
||||
$subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */
|
||||
$subscriptionDao->deleteById($subscriptionId, $context->getId());
|
||||
return DAO::getDataChangedEvent();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/InstitutionalSubscriptionForm.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 InstitutionalSubscriptionForm
|
||||
*
|
||||
* @ingroup subscription
|
||||
*
|
||||
* @brief Form class for institutional subscription create/edits.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\core\Request;
|
||||
use APP\facades\Repo;
|
||||
use APP\notification\NotificationManager;
|
||||
use APP\subscription\form\SubscriptionForm;
|
||||
use APP\subscription\InstitutionalSubscription;
|
||||
use APP\subscription\InstitutionalSubscriptionDAO;
|
||||
use APP\subscription\SubscriptionType;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use APP\template\TemplateManager;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\notification\PKPNotification;
|
||||
|
||||
class InstitutionalSubscriptionForm extends SubscriptionForm
|
||||
{
|
||||
/** @var array of the journal institutions [institutionId => name] */
|
||||
public array $institutions;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $subscriptionId leave as default for new subscription
|
||||
*/
|
||||
public function __construct($request, $subscriptionId = null)
|
||||
{
|
||||
parent::__construct('payments/institutionalSubscriptionForm.tpl', $subscriptionId);
|
||||
|
||||
$subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
|
||||
|
||||
$journal = $request->getJournal();
|
||||
$journalId = $journal->getId();
|
||||
|
||||
$subscriptionInstitutionId = null;
|
||||
|
||||
if (isset($subscriptionId)) {
|
||||
/** @var InstitutionalSubscriptionDAO */
|
||||
$subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO');
|
||||
if ($subscriptionDao->subscriptionExists($subscriptionId)) {
|
||||
$this->subscription = $subscriptionDao->getById($subscriptionId);
|
||||
$subscriptionInstitutionId = $this->subscription->getInstitutionId();
|
||||
}
|
||||
}
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionTypeIterator = $subscriptionTypeDao->getByInstitutional($journalId, true);
|
||||
$this->subscriptionTypes = [];
|
||||
while ($subscriptionType = $subscriptionTypeIterator->next()) {
|
||||
$this->subscriptionTypes[$subscriptionType->getId()] = $subscriptionType->getSummaryString();
|
||||
}
|
||||
if (count($this->subscriptionTypes) == 0) {
|
||||
$this->addError('typeId', __('manager.subscriptions.form.typeRequired'));
|
||||
$this->addErrorField('typeId');
|
||||
}
|
||||
|
||||
$institutions = Repo::institution()->getCollector()
|
||||
->filterByContextIds([$journalId])
|
||||
->getMany();
|
||||
|
||||
$this->institutions = [];
|
||||
foreach ($institutions as $institution) {
|
||||
$this->institutions[$institution->getId()] = $institution->getLocalizedName();
|
||||
}
|
||||
if (isset($subscriptionInstitutionId) && !array_key_exists($subscriptionInstitutionId, $this->institutions)) {
|
||||
// The institution is soft deleted, add it to the institutions list
|
||||
$subscriptionInstitution = Repo::institution()->get($subscriptionInstitutionId);
|
||||
$this->institutions[$subscriptionInstitutionId] = $subscriptionInstitution->getLocalizedName();
|
||||
}
|
||||
if (!count($this->institutions)) {
|
||||
$this->addError('institutionId', __('manager.subscriptions.form.institutionRequired'));
|
||||
$this->addErrorField('institutionId');
|
||||
}
|
||||
|
||||
// Ensure subscription type is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdValid', function ($typeId) use ($journalId) {
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
return $subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && $subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId);
|
||||
}));
|
||||
|
||||
// Ensure institution ID exists
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'institutionId', 'required', 'manager.subscriptions.form.institutionIdValid', function ($institutionId) use ($journalId, $subscriptionInstitutionId) {
|
||||
return ($institutionId == $subscriptionInstitutionId) || Repo::institution()->exists($institutionId, $journalId);
|
||||
}));
|
||||
|
||||
// If provided, domain is valid
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorRegExp($this, 'domain', 'optional', 'manager.subscriptions.form.domainValid', '/^' .
|
||||
'[A-Z0-9]+([\-_\.][A-Z0-9]+)*' .
|
||||
'\.' .
|
||||
'[A-Z]{2,4}' .
|
||||
'$/i'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::fetch
|
||||
*
|
||||
* @param null|string $template
|
||||
*/
|
||||
public function fetch($request, $template = null, $display = false)
|
||||
{
|
||||
$templateMgr = TemplateManager::getManager($request);
|
||||
$templateMgr->assign([
|
||||
'institutions' => $this->institutions,
|
||||
]);
|
||||
return parent::fetch($request, $template, $display);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current subscription.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
parent::initData();
|
||||
|
||||
if (isset($this->subscription)) {
|
||||
/** @var InstitutionalSubscription */
|
||||
$subscription = $this->subscription;
|
||||
$this->_data = array_merge(
|
||||
$this->_data,
|
||||
[
|
||||
'institutionMailingAddress' => $subscription->getInstitutionMailingAddress(),
|
||||
'domain' => $subscription->getDomain(),
|
||||
'institutionId' => $subscription->getInstitutionId(),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
parent::readInputData();
|
||||
$this->readUserVars(['institutionMailingAddress', 'domain', 'institutionId']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::validate()
|
||||
*/
|
||||
public function validate($callHooks = true)
|
||||
{
|
||||
if (!parent::validate()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionType = $subscriptionTypeDao->getById($this->getData('typeId'));
|
||||
|
||||
$institution = Repo::institution()->get($this->getData('institutionId'));
|
||||
$ipRanges = $institution->getIPRanges();
|
||||
|
||||
$domain = $this->getData('domain');
|
||||
// If online or print + online, domain or at least one IP range has to be provided
|
||||
if ($subscriptionType->getFormat() != SubscriptionType::SUBSCRIPTION_TYPE_FORMAT_PRINT) {
|
||||
if (empty($domain) && empty($ipRanges)) {
|
||||
$this->addError('domain', __('manager.subscriptions.form.domainIPRangeRequired'));
|
||||
$this->addErrorField('domain');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute()
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$insert = false;
|
||||
if (!isset($this->subscription)) {
|
||||
$this->subscription = new InstitutionalSubscription();
|
||||
$insert = true;
|
||||
}
|
||||
|
||||
/** @var InstitutionalSubscription */
|
||||
$subscription = $this->subscription;
|
||||
|
||||
parent::execute(...$functionArgs);
|
||||
|
||||
$subscription->setInstitutionId($this->getData('institutionId'));
|
||||
$subscription->setInstitutionMailingAddress($this->getData('institutionMailingAddress'));
|
||||
$subscription->setDomain($this->getData('domain'));
|
||||
|
||||
/** @var InstitutionalSubscriptionDAO $institutionalSubscriptionDao */
|
||||
$institutionalSubscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO');
|
||||
if ($insert) {
|
||||
$institutionalSubscriptionDao->insertObject($this->subscription);
|
||||
} else {
|
||||
$institutionalSubscriptionDao->updateObject($this->subscription);
|
||||
}
|
||||
|
||||
// Send notification email
|
||||
if ($this->getData('notifyEmail')) {
|
||||
$mailable = $this->_prepareNotificationEmail();
|
||||
try {
|
||||
Mail::send($mailable);
|
||||
} catch (Exception $e) {
|
||||
$notificationMgr = new NotificationManager();
|
||||
$request = Application::get()->getRequest();
|
||||
$notificationMgr->createTrivialNotification($request->getUser()->getId(), PKPNotification::NOTIFICATION_TYPE_ERROR, ['contents' => __('email.compose.error')]);
|
||||
error_log($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,221 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/InstitutionalSubscriptionsGridHandler.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 InstitutionalSubscriptionsGridHandler
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Handle subscription grid requests.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Request;
|
||||
use APP\facades\Repo;
|
||||
use APP\notification\NotificationManager;
|
||||
use APP\subscription\InstitutionalSubscriptionDAO;
|
||||
use APP\subscription\SubscriptionDAO;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
use PKP\core\JSONMessage;
|
||||
use PKP\db\DAO;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\identity\Identity;
|
||||
use PKP\notification\PKPNotification;
|
||||
|
||||
class InstitutionalSubscriptionsGridHandler extends SubscriptionsGridHandler
|
||||
{
|
||||
/**
|
||||
* @copydoc SubscriptionsGridHandler::initialize()
|
||||
*
|
||||
* @param null|mixed $args
|
||||
*/
|
||||
public function initialize($request, $args = null)
|
||||
{
|
||||
parent::initialize($request, $args);
|
||||
|
||||
// Basic grid configuration.
|
||||
$this->setTitle('subscriptionManager.institutionalSubscriptions');
|
||||
|
||||
//
|
||||
// Grid columns.
|
||||
//
|
||||
$cellProvider = new SubscriptionsGridCellProvider();
|
||||
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'name',
|
||||
'common.name',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'subscriptionType',
|
||||
'manager.subscriptions.subscriptionType',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'status',
|
||||
'manager.subscriptions.form.status',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'dateStart',
|
||||
'manager.subscriptions.dateStart',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'dateEnd',
|
||||
'manager.subscriptions.dateEnd',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'referenceNumber',
|
||||
'manager.subscriptions.referenceNumber',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Implement methods from GridHandler.
|
||||
//
|
||||
/**
|
||||
* @copydoc GridHandler::renderFilter()
|
||||
*/
|
||||
public function renderFilter($request, $filterData = [])
|
||||
{
|
||||
$userDao = Repo::user()->dao;
|
||||
$filterData = array_merge($filterData, [
|
||||
'fieldOptions' => [
|
||||
Identity::IDENTITY_SETTING_GIVENNAME => 'user.givenName',
|
||||
Identity::IDENTITY_SETTING_FAMILYNAME => 'user.familyName',
|
||||
$userDao::USER_FIELD_USERNAME => 'user.username',
|
||||
$userDao::USER_FIELD_EMAIL => 'user.email',
|
||||
SubscriptionDAO::SUBSCRIPTION_MEMBERSHIP => 'user.subscriptions.form.membership',
|
||||
SubscriptionDAO::SUBSCRIPTION_REFERENCE_NUMBER => 'manager.subscriptions.form.referenceNumber',
|
||||
SubscriptionDAO::SUBSCRIPTION_NOTES => 'manager.subscriptions.form.notes',
|
||||
InstitutionalSubscriptionDAO::SUBSCRIPTION_INSTITUTION_NAME => 'manager.subscriptions.form.institutionName',
|
||||
InstitutionalSubscriptionDAO::SUBSCRIPTION_DOMAIN => 'manager.subscriptions.form.domain',
|
||||
InstitutionalSubscriptionDAO::SUBSCRIPTION_IP_RANGE => 'manager.subscriptions.form.ipRange',
|
||||
],
|
||||
'matchOptions' => [
|
||||
'contains' => 'form.contains',
|
||||
'is' => 'form.is'
|
||||
],
|
||||
]);
|
||||
|
||||
return parent::renderFilter($request, $filterData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::loadData()
|
||||
*/
|
||||
protected function loadData($request, $filter)
|
||||
{
|
||||
// Get the context.
|
||||
$journal = $request->getContext();
|
||||
|
||||
$subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /** @var InstitutionalSubscriptionDAO $subscriptionDao */
|
||||
$rangeInfo = $this->getGridRangeInfo($request, $this->getId());
|
||||
return $subscriptionDao->getByJournalId($journal->getId(), null, $filter['searchField'], $filter['searchMatch'], $filter['search'] ? $filter['search'] : null, null, null, null, $rangeInfo);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Public grid actions.
|
||||
//
|
||||
/**
|
||||
* Edit an existing subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function editSubscription($args, $request)
|
||||
{
|
||||
// Form handling.
|
||||
$subscriptionForm = new InstitutionalSubscriptionForm($request, $request->getUserVar('rowId'));
|
||||
$subscriptionForm->initData();
|
||||
|
||||
return new JSONMessage(true, $subscriptionForm->fetch($request));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function updateSubscription($args, $request)
|
||||
{
|
||||
$subscriptionId = (int) $request->getUserVar('subscriptionId');
|
||||
// Form handling.
|
||||
$subscriptionForm = new InstitutionalSubscriptionForm($request, $subscriptionId);
|
||||
$subscriptionForm->readInputData();
|
||||
|
||||
if ($subscriptionForm->validate()) {
|
||||
$subscriptionForm->execute();
|
||||
$notificationManager = new NotificationManager();
|
||||
$notificationManager->createTrivialNotification($request->getUser()->getId(), PKPNotification::NOTIFICATION_TYPE_SUCCESS);
|
||||
// Prepare the grid row data.
|
||||
return DAO::getDataChangedEvent($subscriptionId);
|
||||
} else {
|
||||
return new JSONMessage(true, $subscriptionForm->fetch($request));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function deleteSubscription($args, $request)
|
||||
{
|
||||
if (!$request->checkCSRF()) {
|
||||
return new JSONMessage(false);
|
||||
}
|
||||
|
||||
$context = $request->getContext();
|
||||
$user = $request->getUser();
|
||||
|
||||
// Identify the subscription ID.
|
||||
$subscriptionId = $request->getUserVar('rowId');
|
||||
$subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /** @var InstitutionalSubscriptionDAO $subscriptionDao */
|
||||
$subscriptionDao->deleteById($subscriptionId, $context->getId());
|
||||
return DAO::getDataChangedEvent();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/PaymentsGridCellProvider.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 PaymentsGridCellProvider
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Class for a cell provider to display information about payments
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\core\Request;
|
||||
use APP\facades\Repo;
|
||||
use PKP\controllers\grid\GridCellProvider;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
|
||||
class PaymentsGridCellProvider extends GridCellProvider
|
||||
{
|
||||
/** @var Request */
|
||||
public $_request;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct($request)
|
||||
{
|
||||
$this->_request = $request;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
//
|
||||
// Template methods from GridCellProvider
|
||||
//
|
||||
|
||||
/**
|
||||
* Extracts variables for a given column from a data element
|
||||
* so that they may be assigned to template before rendering.
|
||||
*
|
||||
* @param \PKP\controllers\grid\GridRow $row
|
||||
* @param GridColumn $column
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTemplateVarsFromRowColumn($row, $column)
|
||||
{
|
||||
$payment = $row->getData();
|
||||
|
||||
switch ($column->getId()) {
|
||||
case 'name':
|
||||
$user = Repo::user()->get($payment->getUserId(), true);
|
||||
return ['label' => $user ? $user->getFullName() : __('common.user.nonexistent')]; // If no $user, returns "[Nonexistent user]" to avoid null user
|
||||
case 'type':
|
||||
$paymentManager = Application::getPaymentManager($this->_request->getJournal());
|
||||
return ['label' => $paymentManager->getPaymentName($payment)];
|
||||
case 'amount':
|
||||
return ['label' => $payment->getAmount() . ' ' . $payment->getCurrencyCode()];
|
||||
case 'timestamp':
|
||||
return ['label' => $payment->getTimestamp()];
|
||||
}
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/PaymentsGridHandler.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 PaymentsGridHandler
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Handle payment grid requests.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Request;
|
||||
use APP\payment\ojs\OJSCompletedPaymentDAO;
|
||||
use PKP\controllers\grid\feature\PagingFeature;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
use PKP\controllers\grid\GridHandler;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\security\authorization\ContextAccessPolicy;
|
||||
use PKP\security\Role;
|
||||
|
||||
class PaymentsGridHandler extends GridHandler
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->addRoleAssignment(
|
||||
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUBSCRIPTION_MANAGER],
|
||||
['fetchGrid', 'fetchRow', 'viewPayment']
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Implement template methods from PKPHandler.
|
||||
//
|
||||
/**
|
||||
* @copydoc PKPHandler::authorize()
|
||||
*/
|
||||
public function authorize($request, &$args, $roleAssignments)
|
||||
{
|
||||
$this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
|
||||
return parent::authorize($request, $args, $roleAssignments);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::initialize()
|
||||
*
|
||||
* @param null|mixed $args
|
||||
*/
|
||||
public function initialize($request, $args = null)
|
||||
{
|
||||
parent::initialize($request, $args);
|
||||
|
||||
// Grid actions.
|
||||
$router = $request->getRouter();
|
||||
|
||||
//
|
||||
// Grid columns.
|
||||
//
|
||||
$cellProvider = new PaymentsGridCellProvider($request);
|
||||
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'name',
|
||||
'common.user',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'type',
|
||||
'manager.payment.paymentType',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'amount',
|
||||
'manager.payment.amount',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'timestamp',
|
||||
'manager.payment.timestamp',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::initFeatures()
|
||||
*/
|
||||
public function initFeatures($request, $args)
|
||||
{
|
||||
return [new PagingFeature()];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::loadData()
|
||||
*/
|
||||
protected function loadData($request, $filter)
|
||||
{
|
||||
$paymentDao = DAORegistry::getDAO('OJSCompletedPaymentDAO'); /** @var OJSCompletedPaymentDAO $paymentDao */
|
||||
$rangeInfo = $this->getGridRangeInfo($request, $this->getId());
|
||||
return $paymentDao->getByContextId($request->getContext()->getId(), $rangeInfo);
|
||||
}
|
||||
|
||||
//
|
||||
// Public grid actions.
|
||||
//
|
||||
/**
|
||||
* View a payment.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*/
|
||||
public function viewPayment($args, $request)
|
||||
{
|
||||
// FIXME
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionTypeForm.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 SubscriptionTypeForm
|
||||
*
|
||||
* @ingroup manager_form
|
||||
*
|
||||
* @brief Form for journal managers to create/edit subscription types.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\subscription\SubscriptionType;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use APP\template\TemplateManager;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\facades\Locale;
|
||||
use PKP\form\Form;
|
||||
|
||||
class SubscriptionTypeForm extends Form
|
||||
{
|
||||
/** @var int $typeId the ID of the subscription type being edited */
|
||||
public $typeId;
|
||||
|
||||
/** @var array $validFormats keys are valid subscription type formats */
|
||||
public $validFormats;
|
||||
|
||||
/** @var array $validCurrencies keys are valid subscription type currencies */
|
||||
public $validCurrencies;
|
||||
|
||||
/** @var int $journalId Journal ID */
|
||||
public $journalId;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $journalId Journal ID
|
||||
* @param int $typeId leave as default for new subscription type
|
||||
* @param null|mixed $typeId
|
||||
*/
|
||||
public function __construct($journalId, $typeId = null)
|
||||
{
|
||||
$this->journalId = $journalId;
|
||||
|
||||
$this->validFormats = [
|
||||
SubscriptionType::SUBSCRIPTION_TYPE_FORMAT_ONLINE => __('subscriptionTypes.format.online'),
|
||||
SubscriptionType::SUBSCRIPTION_TYPE_FORMAT_PRINT => __('subscriptionTypes.format.print'),
|
||||
SubscriptionType::SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE => __('subscriptionTypes.format.printOnline')
|
||||
];
|
||||
|
||||
$this->validCurrencies = [];
|
||||
foreach (Locale::getCurrencies() as $currency) {
|
||||
$this->validCurrencies[$currency->getLetterCode()] = $currency->getLocalName() . ' (' . $currency->getLetterCode() . ')';
|
||||
}
|
||||
asort($this->validCurrencies);
|
||||
|
||||
$this->typeId = isset($typeId) ? (int) $typeId : null;
|
||||
|
||||
parent::__construct('payments/subscriptionTypeForm.tpl');
|
||||
|
||||
// Type name is provided
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorLocale($this, 'name', 'required', 'manager.subscriptionTypes.form.typeNameRequired'));
|
||||
|
||||
// Cost is provided and is numeric and positive
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'cost', 'required', 'manager.subscriptionTypes.form.costRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'cost', 'required', 'manager.subscriptionTypes.form.costNumeric', fn ($cost) => is_numeric($cost) && $cost >= 0));
|
||||
|
||||
// Currency is provided and is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'currency', 'required', 'manager.subscriptionTypes.form.currencyRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'currency', 'required', 'manager.subscriptionTypes.form.currencyValid', array_keys($this->validCurrencies)));
|
||||
|
||||
// Format is provided and is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidator($this, 'format', 'required', 'manager.subscriptionTypes.form.formatRequired'));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'format', 'required', 'manager.subscriptionTypes.form.formatValid', array_keys($this->validFormats)));
|
||||
|
||||
// Institutional flag is valid value
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorInSet($this, 'institutional', 'optional', 'manager.subscriptionTypes.form.institutionalValid', ['0', '1']));
|
||||
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of localized field names for this form
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLocaleFieldNames()
|
||||
{
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
return $subscriptionTypeDao->getLocaleFieldNames();
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::fetch()
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function fetch($request, $template = null, $display = false)
|
||||
{
|
||||
$templateMgr = TemplateManager::getManager($request);
|
||||
$templateMgr->assign([
|
||||
'typeId' => $this->typeId,
|
||||
'validCurrencies' => $this->validCurrencies,
|
||||
'validFormats' => $this->validFormats,
|
||||
]);
|
||||
return parent::fetch($request, $template, $display);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize form data from current subscription type.
|
||||
*/
|
||||
public function initData()
|
||||
{
|
||||
if (isset($this->typeId)) {
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionType = $subscriptionTypeDao->getById($this->typeId, $this->journalId);
|
||||
|
||||
if ($subscriptionType != null) {
|
||||
$this->_data = [
|
||||
'name' => $subscriptionType->getName(null), // Localized
|
||||
'description' => $subscriptionType->getDescription(null), // Localized
|
||||
'cost' => $subscriptionType->getCost(),
|
||||
'currency' => $subscriptionType->getCurrencyCodeAlpha(),
|
||||
'duration' => $subscriptionType->getDuration(),
|
||||
'format' => $subscriptionType->getFormat(),
|
||||
'institutional' => $subscriptionType->getInstitutional(),
|
||||
'membership' => $subscriptionType->getMembership(),
|
||||
'disable_public_display' => $subscriptionType->getDisablePublicDisplay()
|
||||
];
|
||||
} else {
|
||||
$this->typeId = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign form data to user-submitted data.
|
||||
*/
|
||||
public function readInputData()
|
||||
{
|
||||
$this->readUserVars(['name', 'description', 'cost', 'currency', 'duration', 'format', 'institutional', 'membership', 'disable_public_display']);
|
||||
|
||||
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'duration', 'optional', 'manager.subscriptionTypes.form.durationNumeric', fn ($duration) => is_numeric($duration) && $duration >= 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc Form::execute()
|
||||
*/
|
||||
public function execute(...$functionArgs)
|
||||
{
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
|
||||
if (isset($this->typeId)) {
|
||||
$subscriptionType = $subscriptionTypeDao->getById($this->typeId, $this->journalId);
|
||||
}
|
||||
|
||||
if (!isset($subscriptionType)) {
|
||||
$subscriptionType = $subscriptionTypeDao->newDataObject();
|
||||
$subscriptionType->setInstitutional($this->getData('institutional') == null ? 0 : $this->getData('institutional'));
|
||||
}
|
||||
|
||||
$request = Application::get()->getRequest();
|
||||
$journal = $request->getJournal();
|
||||
$subscriptionType->setJournalId($journal->getId());
|
||||
$subscriptionType->setName($this->getData('name'), null); // Localized
|
||||
$subscriptionType->setDescription($this->getData('description'), null); // Localized
|
||||
$subscriptionType->setCost(round($this->getData('cost'), 2));
|
||||
$subscriptionType->setCurrencyCodeAlpha($this->getData('currency'));
|
||||
$subscriptionType->setDuration(($duration = $this->getData('duration')) ? (int) $duration : null);
|
||||
$subscriptionType->setFormat($this->getData('format'));
|
||||
$subscriptionType->setMembership((int) $this->getData('membership'));
|
||||
$subscriptionType->setDisablePublicDisplay((int) $this->getData('disable_public_display'));
|
||||
|
||||
parent::execute(...$functionArgs);
|
||||
|
||||
// Update or insert subscription type
|
||||
if ($subscriptionType->getId() != null) {
|
||||
$subscriptionTypeDao->updateObject($subscriptionType);
|
||||
} else {
|
||||
$subscriptionType->setSequence(REALLY_BIG_NUMBER);
|
||||
$subscriptionTypeDao->insertObject($subscriptionType);
|
||||
|
||||
// Re-order the subscription types so the new one is at the end of the list.
|
||||
$subscriptionTypeDao->resequenceSubscriptionTypes($subscriptionType->getJournalId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionTypesGridCellProvider.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 SubscriptionTypesGridCellProvider
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Class for a cell provider to display information about individual subscriptions
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use PKP\controllers\grid\GridCellProvider;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
|
||||
class SubscriptionTypesGridCellProvider extends GridCellProvider
|
||||
{
|
||||
//
|
||||
// Template methods from GridCellProvider
|
||||
//
|
||||
|
||||
/**
|
||||
* Extracts variables for a given column from a data element
|
||||
* so that they may be assigned to template before rendering.
|
||||
*
|
||||
* @param \PKP\controllers\grid\GridRow $row
|
||||
* @param GridColumn $column
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTemplateVarsFromRowColumn($row, $column)
|
||||
{
|
||||
$subscriptionType = $row->getData();
|
||||
|
||||
switch ($column->getId()) {
|
||||
case 'name':
|
||||
return ['label' => $subscriptionType->getLocalizedName()];
|
||||
case 'type':
|
||||
return ['label' => __($subscriptionType->getInstitutional() ? 'manager.subscriptionTypes.institutional' : 'manager.subscriptionTypes.individual')];
|
||||
case 'duration':
|
||||
return ['label' => $subscriptionType->getDurationYearsMonths()];
|
||||
case 'cost':
|
||||
return ['label' => sprintf('%.2f', $subscriptionType->getCost()) . ' (' . $subscriptionType->getCurrencyStringShort() . ')'];
|
||||
}
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,250 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionTypesGridHandler.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 SubscriptionTypesGridHandler
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Handle subscription type grid requests.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Request;
|
||||
use APP\notification\NotificationManager;
|
||||
use APP\subscription\SubscriptionTypeDAO;
|
||||
use PKP\controllers\grid\feature\PagingFeature;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
use PKP\controllers\grid\GridHandler;
|
||||
use PKP\core\JSONMessage;
|
||||
use PKP\db\DAO;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\linkAction\LinkAction;
|
||||
use PKP\linkAction\request\AjaxModal;
|
||||
use PKP\notification\PKPNotification;
|
||||
use PKP\security\authorization\ContextAccessPolicy;
|
||||
use PKP\security\Role;
|
||||
|
||||
class SubscriptionTypesGridHandler extends GridHandler
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->addRoleAssignment(
|
||||
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUBSCRIPTION_MANAGER],
|
||||
['fetchGrid', 'fetchRow', 'editSubscriptionType', 'updateSubscriptionType',
|
||||
'deleteSubscriptionType', 'addSubscriptionType']
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Implement template methods from PKPHandler.
|
||||
//
|
||||
/**
|
||||
* @copydoc PKPHandler::authorize()
|
||||
*/
|
||||
public function authorize($request, &$args, $roleAssignments)
|
||||
{
|
||||
$this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
|
||||
return parent::authorize($request, $args, $roleAssignments);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::initialize()
|
||||
*
|
||||
* @param null|mixed $args
|
||||
*/
|
||||
public function initialize($request, $args = null)
|
||||
{
|
||||
parent::initialize($request, $args);
|
||||
|
||||
// Basic grid configuration.
|
||||
$this->setTitle('subscriptionManager.subscriptionTypes');
|
||||
|
||||
// Grid actions.
|
||||
$router = $request->getRouter();
|
||||
|
||||
$this->addAction(
|
||||
new LinkAction(
|
||||
'addSubscriptionType',
|
||||
new AjaxModal(
|
||||
$router->url($request, null, null, 'addSubscriptionType', null, null),
|
||||
__('manager.subscriptionTypes.create'),
|
||||
'modal_add_subscription_type',
|
||||
true
|
||||
),
|
||||
__('manager.subscriptionTypes.create'),
|
||||
'add_subscription_type'
|
||||
)
|
||||
);
|
||||
|
||||
//
|
||||
// Grid columns.
|
||||
//
|
||||
$cellProvider = new SubscriptionTypesGridCellProvider();
|
||||
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'name',
|
||||
'common.name',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'type',
|
||||
'manager.subscriptionTypes.subscriptions',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'duration',
|
||||
'manager.subscriptionTypes.duration',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
$this->addColumn(
|
||||
new GridColumn(
|
||||
'cost',
|
||||
'manager.subscriptionTypes.cost',
|
||||
null,
|
||||
null,
|
||||
$cellProvider
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Implement methods from GridHandler.
|
||||
//
|
||||
/**
|
||||
* @copydoc GridHandler::getRowInstance()
|
||||
*
|
||||
* @return SubscriptionTypesGridRow
|
||||
*/
|
||||
protected function getRowInstance()
|
||||
{
|
||||
return new SubscriptionTypesGridRow();
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::initFeatures()
|
||||
*/
|
||||
public function initFeatures($request, $args)
|
||||
{
|
||||
return [new PagingFeature()];
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::loadData()
|
||||
*/
|
||||
protected function loadData($request, $filter)
|
||||
{
|
||||
// Get the context.
|
||||
$journal = $request->getContext();
|
||||
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$rangeInfo = $this->getGridRangeInfo($request, $this->getId());
|
||||
return $subscriptionTypeDao->getByJournalId($journal->getId(), $rangeInfo);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Public grid actions.
|
||||
//
|
||||
/**
|
||||
* Add a new subscription type.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*/
|
||||
public function addSubscriptionType($args, $request)
|
||||
{
|
||||
// Calling editSubscription with an empty row id will add a new subscription type.
|
||||
return $this->editSubscriptionType($args, $request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit an existing subscription type.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function editSubscriptionType($args, $request)
|
||||
{
|
||||
// Form handling.
|
||||
$subscriptionTypeForm = new SubscriptionTypeForm($request->getJournal()->getId(), $request->getUserVar('rowId'));
|
||||
$subscriptionTypeForm->initData();
|
||||
return new JSONMessage(true, $subscriptionTypeForm->fetch($request));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing subscription type.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function updateSubscriptionType($args, $request)
|
||||
{
|
||||
$subscriptionTypeId = (int) $request->getUserVar('typeId');
|
||||
// Form handling.
|
||||
$subscriptionTypeForm = new SubscriptionTypeForm($request->getJournal()->getId(), $subscriptionTypeId);
|
||||
$subscriptionTypeForm->readInputData();
|
||||
|
||||
if ($subscriptionTypeForm->validate()) {
|
||||
$subscriptionTypeForm->execute();
|
||||
$notificationManager = new NotificationManager();
|
||||
$notificationManager->createTrivialNotification($request->getUser()->getId(), PKPNotification::NOTIFICATION_TYPE_SUCCESS);
|
||||
// Prepare the grid row data.
|
||||
return DAO::getDataChangedEvent($subscriptionTypeId);
|
||||
} else {
|
||||
return new JSONMessage(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a subscription type.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*
|
||||
* @return JSONMessage JSON object
|
||||
*/
|
||||
public function deleteSubscriptionType($args, $request)
|
||||
{
|
||||
if (!$request->checkCSRF()) {
|
||||
return new JSONMessage(false);
|
||||
}
|
||||
|
||||
$context = $request->getContext();
|
||||
$user = $request->getUser();
|
||||
|
||||
// Identify the subscription type ID.
|
||||
$subscriptionTypeId = $request->getUserVar('rowId');
|
||||
$subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */
|
||||
$subscriptionTypeDao->deleteById($subscriptionTypeId, $context->getId());
|
||||
return DAO::getDataChangedEvent($subscriptionTypeId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionTypesGridRow.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 SubscriptionTypesGridRow
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief User grid row definition
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use PKP\controllers\grid\GridRow;
|
||||
use PKP\linkAction\LinkAction;
|
||||
use PKP\linkAction\request\AjaxModal;
|
||||
use PKP\linkAction\request\RemoteActionConfirmationModal;
|
||||
|
||||
class SubscriptionTypesGridRow extends GridRow
|
||||
{
|
||||
//
|
||||
// Overridden methods from GridRow
|
||||
//
|
||||
/**
|
||||
* @copydoc GridRow::initialize()
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function initialize($request, $template = null)
|
||||
{
|
||||
parent::initialize($request, $template);
|
||||
|
||||
// Is this a new row or an existing row?
|
||||
$element = & $this->getData();
|
||||
assert(is_a($element, 'SubscriptionType'));
|
||||
|
||||
$rowId = $this->getId();
|
||||
if (!empty($rowId) && is_numeric($rowId)) {
|
||||
// Only add row actions if this is an existing row
|
||||
$router = $request->getRouter();
|
||||
$actionArgs = [
|
||||
'gridId' => $this->getGridId(),
|
||||
'rowId' => $rowId
|
||||
];
|
||||
|
||||
$actionArgs = array_merge($actionArgs, $this->getRequestArgs());
|
||||
|
||||
$this->addAction(
|
||||
new LinkAction(
|
||||
'edit',
|
||||
new AjaxModal(
|
||||
$router->url($request, null, null, 'editSubscriptionType', null, $actionArgs),
|
||||
__('manager.subscriptionTypes.edit'),
|
||||
'modal_edit',
|
||||
true
|
||||
),
|
||||
__('common.edit'),
|
||||
'edit'
|
||||
)
|
||||
);
|
||||
$this->addAction(
|
||||
new LinkAction(
|
||||
'delete',
|
||||
new RemoteActionConfirmationModal(
|
||||
$request->getSession(),
|
||||
__('manager.subscriptionTypes.confirmDelete'),
|
||||
__('common.delete'),
|
||||
$router->url($request, null, null, 'deleteSubscriptionType', null, $actionArgs),
|
||||
'modal_delete'
|
||||
),
|
||||
__('grid.action.delete'),
|
||||
'delete'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionsGridCellProvider.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 SubscriptionsGridCellProvider
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Class for a cell provider to display information about subscriptions
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\facades\Repo;
|
||||
use PKP\controllers\grid\GridCellProvider;
|
||||
use PKP\controllers\grid\GridColumn;
|
||||
|
||||
class SubscriptionsGridCellProvider extends GridCellProvider
|
||||
{
|
||||
//
|
||||
// Template methods from GridCellProvider
|
||||
//
|
||||
|
||||
/**
|
||||
* Extracts variables for a given column from a data element
|
||||
* so that they may be assigned to template before rendering.
|
||||
*
|
||||
* @param \PKP\controllers\grid\GridRow $row
|
||||
* @param GridColumn $column
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTemplateVarsFromRowColumn($row, $column)
|
||||
{
|
||||
$subscription = $row->getData();
|
||||
|
||||
switch ($column->getId()) {
|
||||
case 'name':
|
||||
switch (1) {
|
||||
case is_a($subscription, 'IndividualSubscription'):
|
||||
return ['label' => $subscription->getUserFullName()];
|
||||
case is_a($subscription, 'InstitutionalSubscription'):
|
||||
$institution = Repo::institution()->get($subscription->getInstitutionId());
|
||||
return ['label' => $institution->getLocalizedName()];
|
||||
}
|
||||
assert(false);
|
||||
break;
|
||||
case 'email':
|
||||
assert(is_a($subscription, 'IndividualSubscription'));
|
||||
return ['label' => $subscription->getUserEmail()];
|
||||
case 'subscriptionType':
|
||||
return ['label' => $subscription->getSubscriptionTypeName()];
|
||||
case 'status':
|
||||
return ['label' => $subscription->getStatusString()];
|
||||
case 'dateStart':
|
||||
return ['label' => $subscription->getDateStart()];
|
||||
case 'dateEnd':
|
||||
return ['label' => $subscription->getDateEnd()];
|
||||
case 'referenceNumber':
|
||||
return ['label' => $subscription->getReferenceNumber()];
|
||||
}
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionsGridHandler.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 SubscriptionsGridHandler
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Handle subscription grid requests.
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use APP\core\Request;
|
||||
use APP\subscription\IndividualSubscriptionDAO;
|
||||
use APP\subscription\InstitutionalSubscriptionDAO;
|
||||
use PKP\controllers\grid\feature\PagingFeature;
|
||||
use PKP\controllers\grid\GridHandler;
|
||||
use PKP\db\DAO;
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\linkAction\LinkAction;
|
||||
use PKP\linkAction\request\AjaxModal;
|
||||
use PKP\security\authorization\ContextAccessPolicy;
|
||||
use PKP\security\Role;
|
||||
|
||||
abstract class SubscriptionsGridHandler extends GridHandler
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->addRoleAssignment(
|
||||
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUBSCRIPTION_MANAGER],
|
||||
['fetchGrid', 'fetchRow', 'editSubscription', 'updateSubscription',
|
||||
'deleteSubscription', 'addSubscription', 'renewSubscription']
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Implement template methods from PKPHandler.
|
||||
//
|
||||
/**
|
||||
* @copydoc PKPHandler::authorize()
|
||||
*/
|
||||
public function authorize($request, &$args, $roleAssignments)
|
||||
{
|
||||
$this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
|
||||
return parent::authorize($request, $args, $roleAssignments);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::initialize()
|
||||
*
|
||||
* @param null|mixed $args
|
||||
*/
|
||||
public function initialize($request, $args = null)
|
||||
{
|
||||
parent::initialize($request, $args);
|
||||
|
||||
// Grid actions.
|
||||
$router = $request->getRouter();
|
||||
|
||||
$this->addAction(
|
||||
new LinkAction(
|
||||
'addSubscription',
|
||||
new AjaxModal(
|
||||
$router->url($request, null, null, 'addSubscription', null, null),
|
||||
__('manager.subscriptions.create'),
|
||||
'modal_add_subscription',
|
||||
true
|
||||
),
|
||||
__('manager.subscriptions.create'),
|
||||
'add_subscription'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::initFeatures()
|
||||
*/
|
||||
public function initFeatures($request, $args)
|
||||
{
|
||||
return [new PagingFeature()];
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::getRowInstance()
|
||||
*
|
||||
* @return SubscriptionsGridRow
|
||||
*/
|
||||
protected function getRowInstance()
|
||||
{
|
||||
return new SubscriptionsGridRow();
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::getFilterSelectionData()
|
||||
*
|
||||
* @return array Filter selection data.
|
||||
*/
|
||||
public function getFilterSelectionData($request)
|
||||
{
|
||||
// Get the search terms.
|
||||
$searchField = $request->getUserVar('searchField');
|
||||
$searchMatch = $request->getUserVar('searchMatch');
|
||||
$search = $request->getUserVar('search');
|
||||
|
||||
return $filterSelectionData = [
|
||||
'searchField' => $searchField,
|
||||
'searchMatch' => $searchMatch,
|
||||
'search' => $search ? $search : ''
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc GridHandler::getFilterForm()
|
||||
*
|
||||
* @return string Filter template.
|
||||
*/
|
||||
protected function getFilterForm()
|
||||
{
|
||||
return 'controllers/grid/subscriptions/subscriptionsGridFilter.tpl';
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Public grid actions.
|
||||
//
|
||||
/**
|
||||
* Add a new subscription.
|
||||
*
|
||||
* @param array $args
|
||||
* @param Request $request
|
||||
*/
|
||||
public function addSubscription($args, $request)
|
||||
{
|
||||
// Calling editSubscription with an empty row id will add a new subscription.
|
||||
return $this->editSubscription($args, $request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renew a subscription.
|
||||
*
|
||||
* @param array $args first parameter is the ID of the subscription to renew
|
||||
* @param Request $request
|
||||
*/
|
||||
public function renewSubscription($args, $request)
|
||||
{
|
||||
/** @var InstitutionalSubscriptionDAO|IndividualSubscriptionDAO */
|
||||
$subscriptionDao = DAORegistry::getDAO($request->getUserVar('institutional') ? 'InstitutionalSubscriptionDAO' : 'IndividualSubscriptionDAO');
|
||||
$subscriptionId = $request->getUserVar('rowId');
|
||||
if ($subscription = $subscriptionDao->getById($subscriptionId, $request->getJournal()->getId())) {
|
||||
$subscriptionDao->renewSubscription($subscription);
|
||||
}
|
||||
return DAO::getDataChangedEvent($subscriptionId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file controllers/grid/subscriptions/SubscriptionsGridRow.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 SubscriptionsGridRow
|
||||
*
|
||||
* @ingroup controllers_grid_subscriptions
|
||||
*
|
||||
* @brief Subscriptions grid row definition
|
||||
*/
|
||||
|
||||
namespace APP\controllers\grid\subscriptions;
|
||||
|
||||
use PKP\controllers\grid\GridRow;
|
||||
use PKP\linkAction\LinkAction;
|
||||
use PKP\linkAction\request\AjaxModal;
|
||||
use PKP\linkAction\request\RemoteActionConfirmationModal;
|
||||
|
||||
class SubscriptionsGridRow extends GridRow
|
||||
{
|
||||
//
|
||||
// Overridden methods from GridRow
|
||||
//
|
||||
/**
|
||||
* @copydoc GridRow::initialize()
|
||||
*
|
||||
* @param null|mixed $template
|
||||
*/
|
||||
public function initialize($request, $template = null)
|
||||
{
|
||||
parent::initialize($request, $template);
|
||||
|
||||
// Is this a new row or an existing row?
|
||||
$element = & $this->getData();
|
||||
assert(is_a($element, 'IndividualSubscription') || is_a($element, 'InstitutionalSubscription'));
|
||||
|
||||
$rowId = $this->getId();
|
||||
|
||||
if (!empty($rowId) && is_numeric($rowId)) {
|
||||
// Only add row actions if this is an existing row
|
||||
$router = $request->getRouter();
|
||||
$actionArgs = [
|
||||
'gridId' => $this->getGridId(),
|
||||
'rowId' => $rowId
|
||||
];
|
||||
|
||||
$actionArgs = array_merge($actionArgs, $this->getRequestArgs());
|
||||
|
||||
$this->addAction(new LinkAction(
|
||||
'edit',
|
||||
new AjaxModal(
|
||||
$router->url($request, null, null, 'editSubscription', null, $actionArgs),
|
||||
__('manager.subscriptions.edit'),
|
||||
'modal_edit',
|
||||
true
|
||||
),
|
||||
__('common.edit'),
|
||||
'edit'
|
||||
));
|
||||
if (!$element->isNonExpiring()) {
|
||||
$this->addAction(new LinkAction(
|
||||
'renew',
|
||||
new RemoteActionConfirmationModal(
|
||||
$request->getSession(),
|
||||
__('manager.subscriptions.confirmRenew'),
|
||||
__('manager.subscriptions.renew'),
|
||||
$router->url(
|
||||
$request,
|
||||
null,
|
||||
null,
|
||||
'renewSubscription',
|
||||
null,
|
||||
array_merge($actionArgs, [
|
||||
'institutional' => is_a($element, 'InstitutionalSubscription') ? 1 : 0
|
||||
])
|
||||
),
|
||||
'modal_delete'
|
||||
),
|
||||
__('manager.subscriptions.renew'),
|
||||
'renew'
|
||||
));
|
||||
}
|
||||
$this->addAction(new LinkAction(
|
||||
'delete',
|
||||
new RemoteActionConfirmationModal(
|
||||
$request->getSession(),
|
||||
__('subscriptionManager.subscription.confirmRemove'),
|
||||
__('common.delete'),
|
||||
$router->url($request, null, null, 'deleteSubscription', null, $actionArgs),
|
||||
'modal_delete'
|
||||
),
|
||||
__('grid.action.delete'),
|
||||
'delete'
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user