16 import(
'lib.pkp.classes.form.Form');
38 parent::__construct(
'frontend/pages/purchaseInstitutionalSubscription.tpl');
41 $this->subscription =
null;
44 $subscriptionId = isset($subscriptionId) ? (int) $subscriptionId :
null;
46 if (isset($subscriptionId)) {
48 if ($subscriptionDao->subscriptionExists($subscriptionId)) {
49 $this->subscription = $subscriptionDao->getById($subscriptionId);
53 $journal = $this->request->getJournal();
54 $journalId = $journal->getId();
57 $subscriptionTypes = $subscriptionTypeDao->getByInstitutional($journalId,
true,
false);
61 $this->
addCheck(
new FormValidatorCustom($this,
'typeId',
'required',
'user.subscriptions.form.typeIdValid',
function($typeId) use ($journalId) {
63 return ($subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && $subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId) == 1) && $subscriptionTypeDao->getSubscriptionTypeDisablePublicDisplay($typeId) == 0;
67 $this->
addCheck(
new FormValidator($this,
'institutionName',
'required',
'user.subscriptions.form.institutionNameRequired'));
71 '[A-Z0-9]+([\-_\.][A-Z0-9]+)*' .
84 if (isset($this->subscription)) {
88 'institutionMailingAddress' =>
$subscription->getInstitutionMailingAddress(),
103 $templateMgr->assign(array(
104 'subscriptionId' => $this->subscription?$this->subscription->getId():
null,
105 'subscriptionTypes' => $this->subscriptionTypes,
107 parent::display(
$request, $template);
114 $this->
readUserVars(array(
'typeId',
'membership',
'institutionName',
'institutionMailingAddress',
'domain',
'ipRanges'));
118 $needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->
getData(
'typeId'));
120 if ($needMembership) {
121 $this->
addCheck(
new FormValidator($this,
'membership',
'required',
'user.subscriptions.form.membershipRequired'));
126 $ipRangeProvided =
false;
127 foreach ($ipRanges as $ipRange) {
128 if ($ipRange !=
'') {
129 $ipRangeProvided =
true;
135 $this->
addCheck(
new FormValidatorCustom($this,
'domain',
'required',
'user.subscriptions.form.domainIPRangeRequired',
function($domain) use ($ipRangeProvided) {
136 return ($domain !=
'' || $ipRangeProvided) ?
true :
false;
140 if ($ipRangeProvided) {
141 import(
'classes.subscription.InstitutionalSubscription');
143 $this->
addCheck(
new FormValidatorCustom($this,
'ipRanges',
'required',
'manager.subscriptions.form.ipRangeValid',
function($ipRanges) {
147 '((([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . SUBSCRIPTION_IP_RANGE_WILDCARD .
'])([.]([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . SUBSCRIPTION_IP_RANGE_WILDCARD .
'])){3}((\s)*[' . SUBSCRIPTION_IP_RANGE_RANGE .
'](\s)*([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . SUBSCRIPTION_IP_RANGE_WILDCARD .
'])([.]([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5]|[' . SUBSCRIPTION_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])))))' .
159 function execute(...$functionArgs) {
160 $journal = $this->request->getJournal();
161 $journalId = $journal->getId();
162 $typeId = $this->
getData(
'typeId');
165 $subscriptionType = $subscriptionTypeDao->getById($typeId);
166 $nonExpiring = $subscriptionType->getNonExpiring();
167 $today = date(
'Y-m-d');
169 if (!isset($this->subscription)) {
170 $subscription = $institutionalSubscriptionDao->newDataObject();
180 $paymentPlugin = $paymentManager->getPaymentPlugin();
182 if ($paymentPlugin->getName() ==
'ManualPayment') {
183 $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT);
185 $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
190 $subscription->setDateStart($nonExpiring ?
null : $today);
193 $subscription->setInstitutionMailingAddress($this->
getData(
'institutionMailingAddress'));
194 $subscription->setDomain($this->
getData(
'domain'));
197 if ($subscription->getId()) {
203 $queuedPayment = $paymentManager->createQueuedPayment($this->request, PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $this->userId,
$subscription->getId(), $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
204 $paymentManager->queuePayment($queuedPayment);
206 $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
207 $paymentForm->display($this->request);
208 parent::execute(...$functionArgs);