Open Journal Systems  3.3.0
UserInstitutionalSubscriptionForm.inc.php
1 <?php
2 
16 import('lib.pkp.classes.form.Form');
17 
20  var $request;
21 
23  var $userId;
24 
26  var $subscription;
27 
30 
37  function __construct($request, $userId = null, $subscriptionId = null) {
38  parent::__construct('frontend/pages/purchaseInstitutionalSubscription.tpl');
39 
40  $this->userId = isset($userId) ? (int) $userId : null;
41  $this->subscription = null;
42  $this->request = $request;
43 
44  $subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
45 
46  if (isset($subscriptionId)) {
47  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
48  if ($subscriptionDao->subscriptionExists($subscriptionId)) {
49  $this->subscription = $subscriptionDao->getById($subscriptionId);
50  }
51  }
52 
53  $journal = $this->request->getJournal();
54  $journalId = $journal->getId();
55 
56  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
57  $subscriptionTypes = $subscriptionTypeDao->getByInstitutional($journalId, true, false);
58  $this->subscriptionTypes = $subscriptionTypes->toArray();
59 
60  // Ensure subscription type is valid
61  $this->addCheck(new FormValidatorCustom($this, 'typeId', 'required', 'user.subscriptions.form.typeIdValid', function($typeId) use ($journalId) {
62  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
63  return ($subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && $subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId) == 1) && $subscriptionTypeDao->getSubscriptionTypeDisablePublicDisplay($typeId) == 0;
64  }));
65 
66  // Ensure institution name is provided
67  $this->addCheck(new FormValidator($this, 'institutionName', 'required', 'user.subscriptions.form.institutionNameRequired'));
68 
69  // If provided, domain is valid
70  $this->addCheck(new FormValidatorRegExp($this, 'domain', 'optional', 'user.subscriptions.form.domainValid', '/^' .
71  '[A-Z0-9]+([\-_\.][A-Z0-9]+)*' .
72  '\.' .
73  '[A-Z]{2,4}' .
74  '$/i'));
75 
76  $this->addCheck(new FormValidatorPost($this));
77  $this->addCheck(new FormValidatorCSRF($this));
78  }
79 
83  function initData() {
84  if (isset($this->subscription)) {
86  $this->_data = array(
87  'institutionName' => $subscription->getInstitutionName(),
88  'institutionMailingAddress' => $subscription->getInstitutionMailingAddress(),
89  'domain' => $subscription->getDomain(),
90  'ipRanges' => $subscription->getIPRanges()
91  );
92  }
93  }
94 
98  function display($request = null, $template = null) {
99  if (is_null($request)) {
101  }
102  $templateMgr = TemplateManager::getManager($this->request);
103  $templateMgr->assign(array(
104  'subscriptionId' => $this->subscription?$this->subscription->getId():null,
105  'subscriptionTypes' => $this->subscriptionTypes,
106  ));
107  parent::display($request, $template);
108  }
109 
113  function readInputData() {
114  $this->readUserVars(array('typeId', 'membership', 'institutionName', 'institutionMailingAddress', 'domain', 'ipRanges'));
115 
116  // If subscription type requires it, membership is provided
117  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
118  $needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->getData('typeId'));
119 
120  if ($needMembership) {
121  $this->addCheck(new FormValidator($this, 'membership', 'required', 'user.subscriptions.form.membershipRequired'));
122  }
123 
124  // Check if IP range has been provided
125  $ipRanges = PKPString::regexp_split('/\s+/', trim($this->getData('ipRanges')));
126  $ipRangeProvided = false;
127  foreach ($ipRanges as $ipRange) {
128  if ($ipRange != '') {
129  $ipRangeProvided = true;
130  break;
131  }
132  }
133 
134  // Domain or at least one IP range has been provided
135  $this->addCheck(new FormValidatorCustom($this, 'domain', 'required', 'user.subscriptions.form.domainIPRangeRequired', function($domain) use ($ipRangeProvided) {
136  return ($domain != '' || $ipRangeProvided) ? true : false;
137  }));
138 
139  // If provided ensure IP ranges have IP address format; IP addresses may contain wildcards
140  if ($ipRangeProvided) {
141  import('classes.subscription.InstitutionalSubscription');
142 
143  $this->addCheck(new FormValidatorCustom($this, 'ipRanges', 'required', 'manager.subscriptions.form.ipRangeValid', function($ipRanges) {
144  foreach (PKPString::regexp_split('/\s+/', trim($ipRanges)) as $ipRange) if (!PKPString::regexp_match(
145  '/^' .
146  // IP4 address (with or w/o wildcards) or IP4 address range (with or w/o wildcards) or CIDR IP4 address
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])))))' .
148  '$/i',
149  trim($ipRange))
150  ) return false;
151  return true;
152  }));
153  }
154  }
155 
159  function execute(...$functionArgs) {
160  $journal = $this->request->getJournal();
161  $journalId = $journal->getId();
162  $typeId = $this->getData('typeId');
163  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
164  $institutionalSubscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $institutionalSubscriptionDao InstitutionalSubscriptionDAO */
165  $subscriptionType = $subscriptionTypeDao->getById($typeId);
166  $nonExpiring = $subscriptionType->getNonExpiring();
167  $today = date('Y-m-d');
168 
169  if (!isset($this->subscription)) {
170  $subscription = $institutionalSubscriptionDao->newDataObject();
171  $subscription->setJournalId($journalId);
172  $subscription->setUserId($this->userId);
173  $subscription->setReferenceNumber(null);
174  $subscription->setNotes(null);
175  } else {
177  }
178 
179  $paymentManager = Application::getPaymentManager($journal);
180  $paymentPlugin = $paymentManager->getPaymentPlugin();
181 
182  if ($paymentPlugin->getName() == 'ManualPayment') {
183  $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT);
184  } else {
185  $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
186  }
187 
188  $subscription->setTypeId($typeId);
189  $subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
190  $subscription->setDateStart($nonExpiring ? null : $today);
191  $subscription->setDateEnd($nonExpiring ? null : $today);
192  $subscription->setInstitutionName($this->getData('institutionName'));
193  $subscription->setInstitutionMailingAddress($this->getData('institutionMailingAddress'));
194  $subscription->setDomain($this->getData('domain'));
195  $subscription->setIPRanges(PKPString::regexp_split('/\s+/', $this->getData('ipRanges')));
196 
197  if ($subscription->getId()) {
198  $institutionalSubscriptionDao->updateObject($subscription);
199  } else {
200  $institutionalSubscriptionDao->insertObject($subscription);
201  }
202 
203  $queuedPayment = $paymentManager->createQueuedPayment($this->request, PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $this->userId, $subscription->getId(), $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
204  $paymentManager->queuePayment($queuedPayment);
205 
206  $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
207  $paymentForm->display($this->request);
208  parent::execute(...$functionArgs);
209  }
210 }
UserInstitutionalSubscriptionForm\execute
execute(... $functionArgs)
Definition: UserInstitutionalSubscriptionForm.inc.php:171
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UserInstitutionalSubscriptionForm\$userId
$userId
Definition: UserInstitutionalSubscriptionForm.inc.php:29
UserInstitutionalSubscriptionForm\$subscription
$subscription
Definition: UserInstitutionalSubscriptionForm.inc.php:35
PKPString\regexp_split
static regexp_split($pattern, $subject, $limit=-1)
Definition: PKPString.inc.php:302
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
Application\getPaymentManager
static getPaymentManager($context)
Definition: Application.inc.php:226
UserInstitutionalSubscriptionForm\$request
$request
Definition: UserInstitutionalSubscriptionForm.inc.php:23
UserInstitutionalSubscriptionForm\initData
initData()
Definition: UserInstitutionalSubscriptionForm.inc.php:95
UserInstitutionalSubscriptionForm\$subscriptionTypes
$subscriptionTypes
Definition: UserInstitutionalSubscriptionForm.inc.php:41
UserInstitutionalSubscriptionForm\display
display($request=null, $template=null)
Definition: UserInstitutionalSubscriptionForm.inc.php:110
UserInstitutionalSubscriptionForm\readInputData
readInputData()
Definition: UserInstitutionalSubscriptionForm.inc.php:125
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
UserInstitutionalSubscriptionForm
Form class for user purchase of institutional subscription.
Definition: UserInstitutionalSubscriptionForm.inc.php:18
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
FormValidatorRegExp
Form validation check using a regular expression.
Definition: FormValidatorRegExp.inc.php:18
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
PKPString\regexp_match
static regexp_match($pattern, $subject)
Definition: PKPString.inc.php:245
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
UserInstitutionalSubscriptionForm\__construct
__construct($request, $userId=null, $subscriptionId=null)
Definition: UserInstitutionalSubscriptionForm.inc.php:49