Open Journal Systems  3.3.0
InstitutionalSubscriptionForm.inc.php
1 <?php
2 
16 import('classes.subscription.form.SubscriptionForm');
17 
24  function __construct($request, $subscriptionId = null) {
25  parent::__construct('payments/institutionalSubscriptionForm.tpl', $subscriptionId);
26 
27  $subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
28  $userId = isset($userId) ? (int) $userId : null;
29 
30  $journal = $request->getJournal();
31  $journalId = $journal->getId();
32 
33  if (isset($subscriptionId)) {
34  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO');
35  if ($subscriptionDao->subscriptionExists($subscriptionId)) {
36  $this->subscription = $subscriptionDao->getById($subscriptionId);
37  }
38  }
39 
40  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
41  $subscriptionTypeIterator = $subscriptionTypeDao->getByInstitutional($journalId, true);
42  $this->subscriptionTypes = array();
43  while ($subscriptionType = $subscriptionTypeIterator->next()) {
44  $this->subscriptionTypes[$subscriptionType->getId()] = $subscriptionType->getSummaryString();
45  }
46 
47  if (count($this->subscriptionTypes) == 0) {
48  $this->addError('typeId', __('manager.subscriptions.form.typeRequired'));
49  $this->addErrorField('typeId');
50  }
51 
52  // Ensure subscription type is valid
53  $this->addCheck(new FormValidatorCustom($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdValid', function($typeId) use ($journalId) {
54  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
55  return ($subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && $subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId) == 1);
56  }));
57 
58  // Ensure institution name is provided
59  $this->addCheck(new FormValidator($this, 'institutionName', 'required', 'manager.subscriptions.form.institutionNameRequired'));
60 
61  // If provided, domain is valid
62  $this->addCheck(new FormValidatorRegExp($this, 'domain', 'optional', 'manager.subscriptions.form.domainValid', '/^' .
63  '[A-Z0-9]+([\-_\.][A-Z0-9]+)*' .
64  '\.' .
65  '[A-Z]{2,4}' .
66  '$/i'));
67  }
68 
72  function initData() {
73  parent::initData();
74 
75  if (isset($this->subscription)) {
76  $this->_data = array_merge(
77  $this->_data,
78  array(
79  'institutionName' => $this->subscription->getInstitutionName(),
80  'institutionMailingAddress' => $this->subscription->getInstitutionMailingAddress(),
81  'domain' => $this->subscription->getDomain(),
82  'ipRanges' => join($this->subscription->getIPRanges(), "\r\n"),
83  )
84  );
85  }
86  }
87 
91  function readInputData() {
92  parent::readInputData();
93 
94  $this->readUserVars(array('institutionName', 'institutionMailingAddress', 'domain', 'ipRanges'));
95 
96  // Check if IP range has been provided
97  $ipRanges = $this->getData('ipRanges');
98  $ipRangeProvided = !empty(trim($ipRanges));
99 
100  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
101  $subscriptionType = $subscriptionTypeDao->getById($this->getData('typeId'));
102 
103  // If online or print + online, domain or at least one IP range has been provided
104  if ($subscriptionType->getFormat() != SUBSCRIPTION_TYPE_FORMAT_PRINT) {
105  $this->addCheck(new FormValidatorCustom($this, 'domain', 'optional', 'manager.subscriptions.form.domainIPRangeRequired', function($domain) use ($ipRangeProvided) {
106  return ($domain != '' || $ipRangeProvided) ? true : false;
107  }));
108  }
109 
110  // If provided ensure IP ranges have IP address format; IP addresses may contain wildcards
111  if ($ipRangeProvided) {
112  $this->addCheck(new FormValidatorCustom($this, 'ipRanges', 'required', 'manager.subscriptions.form.ipRangeValid', function($ipRanges) {
113  foreach (explode("\r\n", trim($ipRanges)) as $ipRange) if (!PKPString::regexp_match(
114  '/^' .
115  // IP4 address (with or w/o wildcards) or IP4 address range (with or w/o wildcards) or CIDR IP4 address
116  '((([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])))))' .
117  '$/i',
118  trim($ipRange))
119  ) return false; return true;
120  }));
121  }
122  }
123 
127  function execute(...$functionArgs) {
128  $insert = false;
129  if (!isset($this->subscription)) {
130  import('classes.subscription.InstitutionalSubscription');
131  $this->subscription = new InstitutionalSubscription();
132  $insert = true;
133  }
134 
135  parent::execute(...$functionArgs);
136 
137  $this->subscription->setInstitutionName($this->getData('institutionName'));
138  $this->subscription->setInstitutionMailingAddress($this->getData('institutionMailingAddress'));
139  $this->subscription->setDomain($this->getData('domain'));
140 
141  $ipRanges = $this->getData('ipRanges');
142  $ipRanges = explode("\r\n", trim($ipRanges));
143  $this->subscription->setIPRanges($ipRanges);
144 
145  $institutionalSubscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $institutionalSubscriptionDao InstitutionalSubscriptionDAO */
146  if ($insert) {
147  $institutionalSubscriptionDao->insertObject($this->subscription);
148  } else {
149  $institutionalSubscriptionDao->updateObject($this->subscription);
150  }
151 
152  // Send notification email
153  if ($this->_data['notifyEmail'] == 1) {
154  $mail = $this->_prepareNotificationEmail('SUBSCRIPTION_NOTIFY');
155  if (!$mail->send()) {
156  import('classes.notification.NotificationManager');
157  $notificationMgr = new NotificationManager();
158  $request = Application::get()->getRequest();
159  $notificationMgr->createTrivialNotification($request->getUser()->getId(), NOTIFICATION_TYPE_ERROR, array('contents' => __('email.compose.error')));
160  }
161  }
162  }
163 }
164 
165 
InstitutionalSubscriptionForm\execute
execute(... $functionArgs)
Definition: InstitutionalSubscriptionForm.inc.php:127
InstitutionalSubscriptionForm\initData
initData()
Definition: InstitutionalSubscriptionForm.inc.php:72
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
InstitutionalSubscriptionForm\__construct
__construct($request, $subscriptionId=null)
Definition: InstitutionalSubscriptionForm.inc.php:24
InstitutionalSubscription
Basic class describing an institutional subscription.
Definition: InstitutionalSubscription.inc.php:28
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
Form\addError
addError($field, $message)
Definition: Form.inc.php:404
SubscriptionForm
Base form class for subscription create/edits.
Definition: SubscriptionForm.inc.php:18
SubscriptionForm\$userId
$userId
Definition: SubscriptionForm.inc.php:30
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
SubscriptionForm\_prepareNotificationEmail
_prepareNotificationEmail($mailTemplateKey)
Definition: SubscriptionForm.inc.php:230
InstitutionalSubscriptionForm
Form class for institutional subscription create/edits.
Definition: InstitutionalSubscriptionForm.inc.php:18
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
NotificationManager
Definition: NotificationManager.inc.php:19
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
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
InstitutionalSubscriptionForm\readInputData
readInputData()
Definition: InstitutionalSubscriptionForm.inc.php:91
Form\addErrorField
addErrorField($field)
Definition: Form.inc.php:412