00001 <?php
00002
00019
00020
00021
00022 import('form.Form');
00023
00024 class SubscriptionForm extends Form {
00025
00027 var $subscriptionId;
00028
00033 function SubscriptionForm($subscriptionId = null, $userId = null) {
00034
00035 $this->subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
00036 $this->userId = isset($userId) ? (int) $userId : null;
00037 $journal = &Request::getJournal();
00038
00039 parent::Form('subscription/subscriptionForm.tpl');
00040
00041
00042 $this->addCheck(new FormValidator($this, 'userId', 'required', 'manager.subscriptions.form.userIdRequired'));
00043 $this->addCheck(new FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.userIdValid', create_function('$userId', '$userDao = &DAORegistry::getDAO(\'UserDAO\'); return $userDao->userExistsById($userId);')));
00044
00045
00046 if ($this->subscriptionId == null) {
00047 $this->addCheck(new FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.subscriptionExists', array(DAORegistry::getDAO('SubscriptionDAO'), 'subscriptionExistsByUser'), array($journal->getJournalId()), true));
00048 } else {
00049 $this->addCheck(new FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.subscriptionExists', create_function('$userId, $journalId, $subscriptionId', '$subscriptionDao = &DAORegistry::getDAO(\'SubscriptionDAO\'); $checkId = $subscriptionDao->getSubscriptionIdByUser($userId, $journalId); return ($checkId == 0 || $checkId == $subscriptionId) ? true : false;'), array($journal->getJournalId(), $this->subscriptionId)));
00050 }
00051
00052
00053 $this->addCheck(new FormValidator($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdRequired'));
00054 $this->addCheck(new FormValidatorCustom($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdValid', create_function('$typeId, $journalId', '$subscriptionTypeDao = &DAORegistry::getDAO(\'SubscriptionTypeDAO\'); return $subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId);'), array($journal->getJournalId())));
00055
00056
00057 $this->addCheck(new FormValidator($this, 'dateStartYear', 'required', 'manager.subscriptions.form.dateStartRequired'));
00058 $this->addCheck(new FormValidatorCustom($this, 'dateStartYear', 'required', 'manager.subscriptions.form.dateStartValid', create_function('$dateStartYear', '$minYear = date(\'Y\') + SUBSCRIPTION_YEAR_OFFSET_PAST; $maxYear = date(\'Y\') + SUBSCRIPTION_YEAR_OFFSET_FUTURE; return ($dateStartYear >= $minYear && $dateStartYear <= $maxYear) ? true : false;')));
00059
00060 $this->addCheck(new FormValidator($this, 'dateStartMonth', 'required', 'manager.subscriptions.form.dateStartRequired'));
00061 $this->addCheck(new FormValidatorCustom($this, 'dateStartMonth', 'required', 'manager.subscriptions.form.dateStartValid', create_function('$dateStartMonth', 'return ($dateStartMonth >= 1 && $dateStartMonth <= 12) ? true : false;')));
00062
00063 $this->addCheck(new FormValidator($this, 'dateStartDay', 'required', 'manager.subscriptions.form.dateStartRequired'));
00064 $this->addCheck(new FormValidatorCustom($this, 'dateStartDay', 'required', 'manager.subscriptions.form.dateStartValid', create_function('$dateStartDay', 'return ($dateStartDay >= 1 && $dateStartDay <= 31) ? true : false;')));
00065
00066
00067 $this->addCheck(new FormValidator($this, 'dateEndYear', 'required', 'manager.subscriptions.form.dateEndRequired'));
00068 $this->addCheck(new FormValidatorCustom($this, 'dateEndYear', 'required', 'manager.subscriptions.form.dateEndValid', create_function('$dateEndYear', '$minYear = date(\'Y\') + SUBSCRIPTION_YEAR_OFFSET_PAST; $maxYear = date(\'Y\') + SUBSCRIPTION_YEAR_OFFSET_FUTURE; return ($dateEndYear >= $minYear && $dateEndYear <= $maxYear) ? true : false;')));
00069
00070 $this->addCheck(new FormValidator($this, 'dateEndMonth', 'required', 'manager.subscriptions.form.dateEndRequired'));
00071 $this->addCheck(new FormValidatorCustom($this, 'dateEndMonth', 'required', 'manager.subscriptions.form.dateEndValid', create_function('$dateEndMonth', 'return ($dateEndMonth >= 1 && $dateEndMonth <= 12) ? true : false;')));
00072
00073 $this->addCheck(new FormValidator($this, 'dateEndDay', 'required', 'manager.subscriptions.form.dateEndRequired'));
00074 $this->addCheck(new FormValidatorCustom($this, 'dateEndDay', 'required', 'manager.subscriptions.form.dateEndValid', create_function('$dateEndDay', 'return ($dateEndDay >= 1 && $dateEndDay <= 31) ? true : false;')));
00075
00076
00077 $this->addCheck(new FormValidatorRegExp($this, 'domain', 'optional', 'manager.subscriptions.form.domainValid', '/^' .
00078 '[A-Z0-9]+([\-_\.][A-Z0-9]+)*' .
00079 '\.' .
00080 '[A-Z]{2,4}' .
00081 '$/i'));
00082
00083
00084 $this->addCheck(new FormValidatorRegExp($this, 'ipRange', 'optional', 'manager.subscriptions.form.ipRangeValid','/^' .
00085
00086 '((([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])([.]([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])){3}((\s)*[' . SUBSCRIPTION_IP_RANGE_RANGE . '](\s)*([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])([.]([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])){3}){0,1})|(([0-9]{1,3})([.]([0-9]{1,3})){3}([\/](([3][0-2]{0,1})|([1-2]{0,1}[0-9])))))' .
00087
00088
00089 '((\s)*' . SUBSCRIPTION_IP_RANGE_SEPERATOR . '(\s)*' .
00090 '((([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])([.]([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])){3}((\s)*[' . SUBSCRIPTION_IP_RANGE_RANGE . '](\s)*([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])([.]([0-9]{1,3}|[' . SUBSCRIPTION_IP_RANGE_WILDCARD . '])){3}){0,1})|(([0-9]{1,3})([.]([0-9]{1,3})){3}([\/](([3][0-2]{0,1})|([1-2]{0,1}[0-9])))))' .
00091 ')*' .
00092 '$/i'));
00093
00094
00095 $this->addCheck(new FormValidatorInSet($this, 'notifyEmail', 'optional', 'manager.subscriptions.form.notifyEmailValid', array('1')));
00096 $this->addCheck(new FormValidatorPost($this));
00097 }
00098
00102 function display() {
00103 $templateMgr = &TemplateManager::getManager();
00104 $journal = &Request::getJournal();
00105
00106 $templateMgr->assign('subscriptionId', $this->subscriptionId);
00107 $templateMgr->assign('yearOffsetPast', SUBSCRIPTION_YEAR_OFFSET_PAST);
00108 $templateMgr->assign('yearOffsetFuture', SUBSCRIPTION_YEAR_OFFSET_FUTURE);
00109
00110 $userDao = &DAORegistry::getDAO('UserDAO');
00111 $user = &$userDao->getUser(isset($this->userId)?$this->userId:$this->getData('userId'));
00112
00113 $templateMgr->assign_by_ref('user', $user);
00114
00115 $subscriptionTypeDao = &DAORegistry::getDAO('SubscriptionTypeDAO');
00116 $subscriptionTypes = &$subscriptionTypeDao->getSubscriptionTypesByJournalId($journal->getJournalId());
00117 $templateMgr->assign('subscriptionTypes', $subscriptionTypes);
00118 $templateMgr->assign('helpTopicId', 'journal.managementPages.subscriptions');
00119
00120 parent::display();
00121 }
00122
00126 function initData() {
00127 if (isset($this->subscriptionId)) {
00128 $subscriptionDao = &DAORegistry::getDAO('SubscriptionDAO');
00129 $subscription = &$subscriptionDao->getSubscription($this->subscriptionId);
00130
00131 if ($subscription != null) {
00132 $this->_data = array(
00133 'userId' => $subscription->getUserId(),
00134 'typeId' => $subscription->getTypeId(),
00135 'dateStart' => $subscription->getDateStart(),
00136 'dateEnd' => $subscription->getDateEnd(),
00137 'membership' => $subscription->getMembership(),
00138 'domain' => $subscription->getDomain(),
00139 'ipRange' => $subscription->getIPRange()
00140 );
00141
00142 } else {
00143 $this->subscriptionId = null;
00144 }
00145 }
00146 }
00147
00151 function readInputData() {
00152 $this->readUserVars(array('userId', 'typeId', 'dateStartYear', 'dateStartMonth', 'dateStartDay', 'dateEndYear', 'dateEndMonth', 'dateEndDay', 'membership', 'domain', 'ipRange', 'notifyEmail'));
00153 $this->_data['dateStart'] = $this->_data['dateStartYear'] . '-' . $this->_data['dateStartMonth'] . '-' . $this->_data['dateStartDay'];
00154 $this->_data['dateEnd'] = $this->_data['dateEndYear'] . '-' . $this->_data['dateEndMonth'] . '-' . $this->_data['dateEndDay'];
00155
00156
00157 $subscriptionTypeDao = &DAORegistry::getDAO('SubscriptionTypeDAO');
00158 $needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->getData('typeId'));
00159
00160 if ($needMembership) {
00161 $this->addCheck(new FormValidator($this, 'membership', 'required', 'manager.subscriptions.form.membershipRequired'));
00162 }
00163
00164
00165 $isInstitutional = $subscriptionTypeDao->getSubscriptionTypeInstitutional($this->getData('typeId'));
00166
00167 if ($isInstitutional) {
00168 $this->addCheck(new FormValidatorCustom($this, 'domain', 'required', 'manager.subscriptions.form.domainIPRangeRequired', create_function('$domain, $ipRange', 'return $domain != \'\' || $ipRange != \'\' ? true : false;'), array($this->getData('ipRange'))));
00169 }
00170
00171
00172 if ($this->_data['notifyEmail'] == 1) {
00173 $this->addCheck(new FormValidatorCustom($this, 'notifyEmail', 'required', 'manager.subscriptions.form.subscriptionContactRequired', create_function('', '$journal = &Request::getJournal(); $journalSettingsDao = &DAORegistry::getDAO(\'JournalSettingsDAO\'); $subscriptionName = $journalSettingsDao->getSetting($journal->getJournalId(), \'subscriptionName\'); $subscriptionEmail = $journalSettingsDao->getSetting($journal->getJournalId(), \'subscriptionEmail\'); return $subscriptionName != \'\' && $subscriptionEmail != \'\' ? true : false;'), array()));
00174 }
00175 }
00176
00180 function execute() {
00181 $subscriptionDao = &DAORegistry::getDAO('SubscriptionDAO');
00182 $journal = &Request::getJournal();
00183
00184 if (isset($this->subscriptionId)) {
00185 $subscription = &$subscriptionDao->getSubscription($this->subscriptionId);
00186 }
00187
00188 if (!isset($subscription)) {
00189 $subscription = &new Subscription();
00190 }
00191
00192 $subscription->setJournalId($journal->getJournalId());
00193 $subscription->setUserId($this->getData('userId'));
00194 $subscription->setTypeId($this->getData('typeId'));
00195 $subscription->setDateStart($this->getData('dateStartYear') . '-' . $this->getData('dateStartMonth'). '-' . $this->getData('dateStartDay'));
00196 $subscription->setDateEnd($this->getData('dateEndYear') . '-' . $this->getData('dateEndMonth'). '-' . $this->getData('dateEndDay'));
00197 $subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
00198 $subscription->setDomain($this->getData('domain') ? $this->getData('domain') : null);
00199 $subscription->setIPRange($this->getData('ipRange') ? $this->getData('ipRange') : null);
00200
00201
00202 if ($subscription->getSubscriptionId() != null) {
00203 $subscriptionDao->updateSubscription($subscription);
00204 } else {
00205 $subscriptionDao->insertSubscription($subscription);
00206 }
00207
00208 if ($this->getData('notifyEmail')) {
00209
00210 $userDao = &DAORegistry::getDAO('UserDAO');
00211 $subscriptionTypeDao = &DAORegistry::getDAO('SubscriptionTypeDAO');
00212 $journalSettingsDao = &DAORegistry::getDAO('JournalSettingsDAO');
00213
00214 $journalName = $journal->getJournalTitle();
00215 $journalId = $journal->getJournalId();
00216 $user = &$userDao->getUser($this->getData('userId'));
00217 $subscriptionType = &$subscriptionTypeDao->getSubscriptionType($this->getData('typeId'));
00218
00219 $subscriptionName = $journalSettingsDao->getSetting($journalId, 'subscriptionName');
00220 $subscriptionEmail = $journalSettingsDao->getSetting($journalId, 'subscriptionEmail');
00221 $subscriptionPhone = $journalSettingsDao->getSetting($journalId, 'subscriptionPhone');
00222 $subscriptionFax = $journalSettingsDao->getSetting($journalId, 'subscriptionFax');
00223 $subscriptionMailingAddress = $journalSettingsDao->getSetting($journalId, 'subscriptionMailingAddress');
00224 $subscriptionContactSignature = $subscriptionName;
00225
00226 if ($subscriptionMailingAddress != '') {
00227 $subscriptionContactSignature .= "\n" . $subscriptionMailingAddress;
00228 }
00229 if ($subscriptionPhone != '') {
00230 $subscriptionContactSignature .= "\n" . Locale::Translate('user.phone') . ': ' . $subscriptionPhone;
00231 }
00232 if ($subscriptionFax != '') {
00233 $subscriptionContactSignature .= "\n" . Locale::Translate('user.fax') . ': ' . $subscriptionFax;
00234 }
00235
00236 $subscriptionContactSignature .= "\n" . Locale::Translate('user.email') . ': ' . $subscriptionEmail;
00237
00238 $paramArray = array(
00239 'subscriberName' => $user->getFullName(),
00240 'journalName' => $journalName,
00241 'subscriptionType' => $subscriptionType->getSummaryString(),
00242 'username' => $user->getUsername(),
00243 'subscriptionContactSignature' => $subscriptionContactSignature
00244 );
00245
00246 import('mail.MailTemplate');
00247 $mail = &new MailTemplate('SUBSCRIPTION_NOTIFY');
00248 $mail->setFrom($subscriptionEmail, $subscriptionName);
00249 $mail->assignParams($paramArray);
00250 $mail->addRecipient($user->getEmail(), $user->getFullName());
00251 $mail->send();
00252 }
00253 }
00254
00255 }
00256
00257 ?>