/ojs/ojs-2.2/classes/subscription/form/SubscriptionPolicyForm.inc.php

https://github.com/mcrider/pkpUpgradeTestSuite · PHP · 211 lines · 127 code · 36 blank · 48 comment · 22 complexity · 84f0e211d03a2e367c43c67a20d63a58 MD5 · raw file

  1. <?php
  2. /**
  3. * @file SubscriptionPolicyForm.inc.php
  4. *
  5. * Copyright (c) 2003-2007 John Willinsky
  6. * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
  7. *
  8. * @package manager.form
  9. * @class SubscriptionPolicyForm
  10. *
  11. * Form for managers to setup subscription policies.
  12. *
  13. * $Id: SubscriptionPolicyForm.inc.php,v 1.10 2007/09/19 00:04:36 asmecher Exp $
  14. */
  15. define('SUBSCRIPTION_OPEN_ACCESS_DELAY_MIN', '0');
  16. define('SUBSCRIPTION_OPEN_ACCESS_DELAY_MAX', '24');
  17. define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MIN', '1');
  18. define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MAX', '12');
  19. define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MIN', '0');
  20. define('SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MAX', '3');
  21. define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MIN', '1');
  22. define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MAX', '12');
  23. define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MIN', '0');
  24. define('SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MAX', '3');
  25. import('form.Form');
  26. class SubscriptionPolicyForm extends Form {
  27. /** @var validDuration array keys are valid open access delay months */
  28. var $validDuration;
  29. /** @var validNumMonthsBeforeExpiry array keys are valid expiry reminder months */
  30. var $validNumMonthsBeforeExpiry;
  31. /** @var validNumWeeksBeforeExpiry array keys are valid expiry reminder weeks */
  32. var $validNumWeeksBeforeExpiry;
  33. /** @var validNumMonthsAfterExpiry array keys are valid expiry reminder months */
  34. var $validNumMonthsAfterExpiry;
  35. /** @var validNumWeeksAfterExpiry array keys are valid expiry reminder weeks */
  36. var $validNumWeeksAfterExpiry;
  37. /**
  38. * Constructor
  39. */
  40. function SubscriptionPolicyForm() {
  41. for ($i=SUBSCRIPTION_OPEN_ACCESS_DELAY_MIN; $i<=SUBSCRIPTION_OPEN_ACCESS_DELAY_MAX; $i++) {
  42. $this->validDuration[$i] = $i;
  43. }
  44. for ($i=SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MIN; $i<=SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_MONTHS_MAX; $i++) {
  45. $this->validNumMonthsBeforeExpiry[$i] = $i;
  46. }
  47. for ($i=SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MIN; $i<=SUBSCRIPTION_EXPIRY_REMINDER_BEFORE_WEEKS_MAX; $i++) {
  48. $this->validNumWeeksBeforeExpiry[$i] = $i;
  49. }
  50. for ($i=SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MIN; $i<=SUBSCRIPTION_EXPIRY_REMINDER_AFTER_MONTHS_MAX; $i++) {
  51. $this->validNumMonthsAfterExpiry[$i] = $i;
  52. }
  53. for ($i=SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MIN; $i<=SUBSCRIPTION_EXPIRY_REMINDER_AFTER_WEEKS_MAX; $i++) {
  54. $this->validNumWeeksAfterExpiry[$i] = $i;
  55. }
  56. parent::Form('subscription/subscriptionPolicyForm.tpl');
  57. // If provided, subscription contact email is valid
  58. $this->addCheck(new FormValidatorEmail($this, 'subscriptionEmail', 'optional', 'manager.subscriptionPolicies.subscriptionContactEmailValid'));
  59. // If provided delayed open access duration is valid value
  60. $this->addCheck(new FormValidatorInSet($this, 'delayedOpenAccessDuration', 'optional', 'manager.subscriptionPolicies.delayedOpenAccessDurationValid', array_keys($this->validDuration)));
  61. // If provided expiry reminder months before value is valid value
  62. $this->addCheck(new FormValidatorInSet($this, 'numMonthsBeforeSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numMonthsBeforeSubscriptionExpiryReminderValid', array_keys($this->validNumMonthsBeforeExpiry)));
  63. // If provided expiry reminder weeks before value is valid value
  64. $this->addCheck(new FormValidatorInSet($this, 'numWeeksBeforeSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numWeeksBeforeSubscriptionExpiryReminderValid', array_keys($this->validNumWeeksBeforeExpiry)));
  65. // If provided expiry reminder months after value is valid value
  66. $this->addCheck(new FormValidatorInSet($this, 'numMonthsAfterSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numMonthsAfterSubscriptionExpiryReminderValid', array_keys($this->validNumMonthsAfterExpiry)));
  67. // If provided expiry reminder weeks after value is valid value
  68. $this->addCheck(new FormValidatorInSet($this, 'numWeeksAfterSubscriptionExpiryReminder', 'optional', 'manager.subscriptionPolicies.numWeeksAfterSubscriptionExpiryReminderValid', array_keys($this->validNumWeeksAfterExpiry)));
  69. $this->addCheck(new FormValidatorPost($this));
  70. }
  71. /**
  72. * Display the form.
  73. */
  74. function display() {
  75. $templateMgr = &TemplateManager::getManager();
  76. $templateMgr->assign('validDuration', $this->validDuration);
  77. $templateMgr->assign('validNumMonthsBeforeExpiry', $this->validNumMonthsBeforeExpiry);
  78. $templateMgr->assign('validNumWeeksBeforeExpiry', $this->validNumWeeksBeforeExpiry);
  79. $templateMgr->assign('validNumMonthsAfterExpiry', $this->validNumMonthsAfterExpiry);
  80. $templateMgr->assign('validNumWeeksAfterExpiry', $this->validNumWeeksAfterExpiry);
  81. parent::display();
  82. }
  83. /**
  84. * Initialize form data from current subscription policies.
  85. */
  86. function initData() {
  87. $journalSettingsDao = &DAORegistry::getDAO('JournalSettingsDAO');
  88. $journal = &Request::getJournal();
  89. $journalId = $journal->getJournalId();
  90. $this->_data = array(
  91. 'subscriptionName' => $journalSettingsDao->getSetting($journalId, 'subscriptionName'),
  92. 'subscriptionEmail' => $journalSettingsDao->getSetting($journalId, 'subscriptionEmail'),
  93. 'subscriptionPhone' => $journalSettingsDao->getSetting($journalId, 'subscriptionPhone'),
  94. 'subscriptionFax' => $journalSettingsDao->getSetting($journalId, 'subscriptionFax'),
  95. 'subscriptionMailingAddress' => $journalSettingsDao->getSetting($journalId, 'subscriptionMailingAddress'),
  96. 'subscriptionAdditionalInformation' => $journalSettingsDao->getSetting($journalId, 'subscriptionAdditionalInformation'),
  97. 'enableDelayedOpenAccess' => $journalSettingsDao->getSetting($journalId, 'enableDelayedOpenAccess'),
  98. 'delayedOpenAccessDuration' => $journalSettingsDao->getSetting($journalId, 'delayedOpenAccessDuration'),
  99. 'delayedOpenAccessPolicy' => $journalSettingsDao->getSetting($journalId, 'delayedOpenAccessPolicy'),
  100. 'enableOpenAccessNotification' => $journalSettingsDao->getSetting($journalId, 'enableOpenAccessNotification'),
  101. 'enableAuthorSelfArchive' => $journalSettingsDao->getSetting($journalId, 'enableAuthorSelfArchive'),
  102. 'authorSelfArchivePolicy' => $journalSettingsDao->getSetting($journalId, 'authorSelfArchivePolicy'),
  103. 'enableSubscriptionExpiryReminderBeforeMonths' => $journalSettingsDao->getSetting($journalId, 'enableSubscriptionExpiryReminderBeforeMonths'),
  104. 'numMonthsBeforeSubscriptionExpiryReminder' => $journalSettingsDao->getSetting($journalId, 'numMonthsBeforeSubscriptionExpiryReminder'),
  105. 'enableSubscriptionExpiryReminderBeforeWeeks' => $journalSettingsDao->getSetting($journalId, 'enableSubscriptionExpiryReminderBeforeWeeks'),
  106. 'numWeeksBeforeSubscriptionExpiryReminder' => $journalSettingsDao->getSetting($journalId, 'numWeeksBeforeSubscriptionExpiryReminder'),
  107. 'enableSubscriptionExpiryReminderAfterMonths' => $journalSettingsDao->getSetting($journalId, 'enableSubscriptionExpiryReminderAfterMonths'),
  108. 'numMonthsAfterSubscriptionExpiryReminder' => $journalSettingsDao->getSetting($journalId, 'numMonthsAfterSubscriptionExpiryReminder'),
  109. 'enableSubscriptionExpiryReminderAfterWeeks' => $journalSettingsDao->getSetting($journalId, 'enableSubscriptionExpiryReminderAfterWeeks'),
  110. 'numWeeksAfterSubscriptionExpiryReminder' => $journalSettingsDao->getSetting($journalId, 'numWeeksAfterSubscriptionExpiryReminder')
  111. );
  112. }
  113. /**
  114. * Assign form data to user-submitted data.
  115. */
  116. function readInputData() {
  117. $this->readUserVars(array('subscriptionName', 'subscriptionEmail', 'subscriptionPhone', 'subscriptionFax', 'subscriptionMailingAddress', 'subscriptionAdditionalInformation', 'enableDelayedOpenAccess', 'delayedOpenAccessDuration', 'delayedOpenAccessPolicy', 'enableOpenAccessNotification', 'enableAuthorSelfArchive', 'authorSelfArchivePolicy', 'enableSubscriptionExpiryReminderBeforeMonths', 'numMonthsBeforeSubscriptionExpiryReminder', 'enableSubscriptionExpiryReminderBeforeWeeks', 'numWeeksBeforeSubscriptionExpiryReminder', 'enableSubscriptionExpiryReminderAfterWeeks', 'numWeeksAfterSubscriptionExpiryReminder', 'enableSubscriptionExpiryReminderAfterMonths', 'numMonthsAfterSubscriptionExpiryReminder'));
  118. // If delayed open access selected, ensure a valid duration is provided
  119. if ($this->_data['enableDelayedOpenAccess'] == 1) {
  120. $this->addCheck(new FormValidatorInSet($this, 'delayedOpenAccessDuration', 'required', 'manager.subscriptionPolicies.delayedOpenAccessDurationValid', array_keys($this->validDuration)));
  121. }
  122. // If expiry reminder before months is selected, ensure a valid month value is provided
  123. if ($this->_data['enableSubscriptionExpiryReminderBeforeMonths'] == 1) {
  124. $this->addCheck(new FormValidatorInSet($this, 'numMonthsBeforeSubscriptionExpiryReminder', 'required', 'manager.subscriptionPolicies.numMonthsBeforeSubscriptionExpiryReminderValid', array_keys($this->validNumMonthsBeforeExpiry)));
  125. }
  126. // If expiry reminder before weeks is selected, ensure a valid week value is provided
  127. if ($this->_data['enableSubscriptionExpiryReminderBeforeWeeks'] == 1) {
  128. $this->addCheck(new FormValidatorInSet($this, 'numWeeksBeforeSubscriptionExpiryReminder', 'required', 'manager.subscriptionPolicies.numWeeksBeforeSubscriptionExpiryReminderValid', array_keys($this->validNumWeeksBeforeExpiry)));
  129. }
  130. // If expiry reminder after months is selected, ensure a valid month value is provided
  131. if ($this->_data['enableSubscriptionExpiryReminderAfterMonths'] == 1) {
  132. $this->addCheck(new FormValidatorInSet($this, 'numMonthsAfterSubscriptionExpiryReminder', 'required', 'manager.subscriptionPolicies.numMonthsAfterSubscriptionExpiryReminderValid', array_keys($this->validNumMonthsAfterExpiry)));
  133. }
  134. // If expiry reminder after weeks is selected, ensure a valid week value is provided
  135. if ($this->_data['enableSubscriptionExpiryReminderAfterWeeks'] == 1) {
  136. $this->addCheck(new FormValidatorInSet($this, 'numWeeksAfterSubscriptionExpiryReminder', 'required', 'manager.subscriptionPolicies.numWeeksAfterSubscriptionExpiryReminderValid', array_keys($this->validNumWeeksAfterExpiry)));
  137. }
  138. }
  139. /**
  140. * Get the names of the fields for which localized settings are used
  141. * @return array
  142. */
  143. function getLocaleFieldNames() {
  144. return array('subscriptionAdditionalInformation', 'delayedOpenAccessPolicy', 'authorSelfArchivePolicy');
  145. }
  146. /**
  147. * Save subscription policies.
  148. */
  149. function execute() {
  150. $journalSettingsDao = &DAORegistry::getDAO('JournalSettingsDAO');
  151. $journal = &Request::getJournal();
  152. $journalId = $journal->getJournalId();
  153. $journalSettingsDao->updateSetting($journalId, 'subscriptionName', $this->getData('subscriptionName'), 'string');
  154. $journalSettingsDao->updateSetting($journalId, 'subscriptionEmail', $this->getData('subscriptionEmail'), 'string');
  155. $journalSettingsDao->updateSetting($journalId, 'subscriptionPhone', $this->getData('subscriptionPhone'), 'string');
  156. $journalSettingsDao->updateSetting($journalId, 'subscriptionFax', $this->getData('subscriptionFax'), 'string');
  157. $journalSettingsDao->updateSetting($journalId, 'subscriptionMailingAddress', $this->getData('subscriptionMailingAddress'), 'string');
  158. $journalSettingsDao->updateSetting($journalId, 'subscriptionAdditionalInformation', $this->getData('subscriptionAdditionalInformation'), 'string', true); // Localized
  159. $journalSettingsDao->updateSetting($journalId, 'enableDelayedOpenAccess', $this->getData('enableDelayedOpenAccess') == null ? 0 : $this->getData('enableDelayedOpenAccess'), 'bool');
  160. $journalSettingsDao->updateSetting($journalId, 'delayedOpenAccessDuration', $this->getData('delayedOpenAccessDuration'), 'int');
  161. $journalSettingsDao->updateSetting($journalId, 'delayedOpenAccessPolicy', $this->getData('delayedOpenAccessPolicy'), 'string', true); // Localized
  162. $journalSettingsDao->updateSetting($journalId, 'enableOpenAccessNotification', $this->getData('enableOpenAccessNotification') == null ? 0 : $this->getData('enableOpenAccessNotification'), 'bool');
  163. $journalSettingsDao->updateSetting($journalId, 'enableAuthorSelfArchive', $this->getData('enableAuthorSelfArchive') == null ? 0 : $this->getData('enableAuthorSelfArchive'), 'bool');
  164. $journalSettingsDao->updateSetting($journalId, 'authorSelfArchivePolicy', $this->getData('authorSelfArchivePolicy'), 'string', true); // Localized
  165. $journalSettingsDao->updateSetting($journalId, 'enableSubscriptionExpiryReminderBeforeMonths', $this->getData('enableSubscriptionExpiryReminderBeforeMonths') == null ? 0 : $this->getData('enableSubscriptionExpiryReminderBeforeMonths'), 'bool');
  166. $journalSettingsDao->updateSetting($journalId, 'numMonthsBeforeSubscriptionExpiryReminder', $this->getData('numMonthsBeforeSubscriptionExpiryReminder'), 'int');
  167. $journalSettingsDao->updateSetting($journalId, 'enableSubscriptionExpiryReminderBeforeWeeks', $this->getData('enableSubscriptionExpiryReminderBeforeWeeks') == null ? 0 : $this->getData('enableSubscriptionExpiryReminderBeforeWeeks'), 'bool');
  168. $journalSettingsDao->updateSetting($journalId, 'numWeeksBeforeSubscriptionExpiryReminder', $this->getData('numWeeksBeforeSubscriptionExpiryReminder'), 'int');
  169. $journalSettingsDao->updateSetting($journalId, 'enableSubscriptionExpiryReminderAfterMonths', $this->getData('enableSubscriptionExpiryReminderAfterMonths') == null ? 0 : $this->getData('enableSubscriptionExpiryReminderAfterMonths'), 'bool');
  170. $journalSettingsDao->updateSetting($journalId, 'numMonthsAfterSubscriptionExpiryReminder', $this->getData('numMonthsAfterSubscriptionExpiryReminder'), 'int');
  171. $journalSettingsDao->updateSetting($journalId, 'enableSubscriptionExpiryReminderAfterWeeks', $this->getData('enableSubscriptionExpiryReminderAfterWeeks') == null ? 0 : $this->getData('enableSubscriptionExpiryReminderAfterWeeks'), 'bool');
  172. $journalSettingsDao->updateSetting($journalId, 'numWeeksAfterSubscriptionExpiryReminder', $this->getData('numWeeksAfterSubscriptionExpiryReminder'), 'int');
  173. }
  174. }
  175. ?>