00001 <?php
00002
00016
00017
00018
00019 class IssueAction {
00020
00024 function IssueAction() {
00025 }
00026
00037 function smartyPrintIssueId($params, &$smarty) {
00038 if (isset($params) && !empty($params)) {
00039 if (isset($params['articleId'])) {
00040 $issueDao = &DAORegistry::getDAO('IssueDAO');
00041 $issue = &$issueDao->getIssueByArticleId($params['articleId']);
00042 if ($issue != null) {
00043 return $issue->getIssueIdentification();
00044 }
00045 }
00046 }
00047 }
00048
00054 function subscriptionRequired(&$issue) {
00055 $currentJournal =& Request::getJournal();
00056 if (!$issue) return false;
00057 if (!$currentJournal || $currentJournal->getJournalId() !== $issue->getJournalId()) {
00058 $journalDao = &DAORegistry::getDAO('JournalDAO');
00059 $journal =& $journalDao->getJournal($issue->getJournalId());
00060 } else {
00061 $journal =& $currentJournal;
00062 }
00063
00064 $result = $journal->getSetting('enableSubscriptions') &&
00065 $issue->getAccessStatus() != OPEN_ACCESS &&
00066 $issue->getOpenAccessDate() &&
00067 strtotime($issue->getOpenAccessDate()) > time();
00068
00069 HookRegistry::call('IssueAction::subscriptionRequired', array(&$journal, &$issue, &$result));
00070 return $result;
00071 }
00072
00079 function allowedPrePublicationAccess(&$journal) {
00080 $roleDao =& DAORegistry::getDAO('RoleDAO');
00081 $user =& Request::getUser();
00082 if ($user && $journal) {
00083 $subscriptionAssumedRoles = array(
00084 ROLE_ID_JOURNAL_MANAGER,
00085 ROLE_ID_EDITOR,
00086 ROLE_ID_SECTION_EDITOR,
00087 ROLE_ID_LAYOUT_EDITOR,
00088 ROLE_ID_COPYEDITOR,
00089 ROLE_ID_PROOFREADER,
00090 ROLE_ID_SUBSCRIPTION_MANAGER
00091 );
00092
00093 $roles =& $roleDao->getRolesByUserId($user->getUserId(), $journal->getJournalId());
00094 foreach ($roles as $role) {
00095 if (in_array($role->getRoleId(), $subscriptionAssumedRoles)) return true;
00096 }
00097 }
00098
00099 return false;
00100 }
00101
00106 function subscribedUser(&$journal, $issueId = null, $articleId = null) {
00107 $user = &Request::getUser();
00108 $subscriptionDao = &DAORegistry::getDAO('SubscriptionDAO');
00109 $result = false;
00110 if (isset($user) && isset($journal)) {
00111 if (IssueAction::allowedPrePublicationAccess($journal)) {
00112 $result = true;
00113 } else {
00114 $result = $subscriptionDao->isValidSubscription(null, null, $user->getUserId(), $journal->getJournalId());
00115 }
00116
00117
00118
00119 if (!$result && $journal->getSetting('subscriptionExpiryPartial')) {
00120 if (isset($articleId)) {
00121 $publishedArticleDao = &DAORegistry::getDAO('PublishedArticleDAO');
00122 $publishedArticle = &$publishedArticleDao->getPublishedArticleByArticleId($articleId);
00123 if (isset($publishedArticle)) {
00124 import('subscription.SubscriptionDAO');
00125 $result = $subscriptionDao->isValidSubscription(null, null, $user->getUserId(), $journal->getJournalId(), SUBSCRIPTION_DATE_END, $publishedArticle->getDatePublished());
00126 }
00127 } else if (isset($issueId)) {
00128 $issueDao = &DAORegistry::getDAO('IssueDAO');
00129 $issue = &$issueDao->getIssueById($issueId);
00130 if (isset($issue) && $issue->getPublished()) {
00131 import('subscription.SubscriptionDAO');
00132 $result = $subscriptionDao->isValidSubscription(null, null, $user->getUserId(), $journal->getJournalId(), SUBSCRIPTION_DATE_END, $issue->getDatePublished());
00133 }
00134 }
00135 }
00136 }
00137 HookRegistry::call('IssueAction::subscribedUser', array(&$journal, &$result));
00138 return $result;
00139 }
00140
00145 function subscribedDomain(&$journal, $issueId = null, $articleId = null) {
00146 $subscriptionDao = &DAORegistry::getDAO('SubscriptionDAO');
00147 $result = false;
00148 if (isset($journal)) {
00149 $result = $subscriptionDao->isValidSubscription(Request::getRemoteDomain(), Request::getRemoteAddr(), null, $journal->getJournalId());
00150
00151
00152
00153 if (!$result && $journal->getSetting('subscriptionExpiryPartial')) {
00154 if (isset($articleId)) {
00155 $publishedArticleDao = &DAORegistry::getDAO('PublishedArticleDAO');
00156 $publishedArticle = &$publishedArticleDao->getPublishedArticleByArticleId($articleId);
00157 if (isset($publishedArticle)) {
00158 import('subscription.SubscriptionDAO');
00159 $result = $subscriptionDao->isValidSubscription(Request::getRemoteDomain(), Request::getRemoteAddr(), null, $journal->getJournalId(), SUBSCRIPTION_DATE_END, $publishedArticle->getDatePublished());
00160 }
00161 } else if (isset($issueId)) {
00162 $issueDao = &DAORegistry::getDAO('IssueDAO');
00163 $issue = &$issueDao->getIssueById($issueId);
00164 if (isset($issue) && $issue->getPublished()) {
00165 import('subscription.SubscriptionDAO');
00166 $result = $subscriptionDao->isValidSubscription(Request::getRemoteDomain(), Request::getRemoteAddr(), null, $journal->getJournalId(), SUBSCRIPTION_DATE_END, $issue->getDatePublished());
00167 }
00168 }
00169 }
00170 }
00171 HookRegistry::call('IssueAction::subscribedDomain', array(&$journal, &$result));
00172 return $result;
00173 }
00174
00180 function getIssueOptions() {
00181 $issueOptions = array();
00182
00183 $journal = &Request::getJournal();
00184 $journalId = $journal->getJournalId();
00185
00186 $issueDao = &DAORegistry::getDAO('IssueDAO');
00187
00188 $issueOptions['-100'] = '------ ' . Locale::translate('editor.issues.futureIssues') . ' ------';
00189 $issueIterator = $issueDao->getUnpublishedIssues($journalId);
00190 while (!$issueIterator->eof()) {
00191 $issue = &$issueIterator->next();
00192 $issueOptions[$issue->getIssueId()] = $issue->getIssueIdentification();
00193 }
00194 $issueOptions['-101'] = '------ ' . Locale::translate('editor.issues.currentIssue') . ' ------';
00195 $issuesIterator = $issueDao->getPublishedIssues($journalId);
00196 $issues = $issuesIterator->toArray();
00197 if (isset($issues[0]) && $issues[0]->getCurrent()) {
00198 $issueOptions[$issues[0]->getIssueId()] = $issues[0]->getIssueIdentification();
00199 array_shift($issues);
00200 }
00201 $issueOptions['-102'] = '------ ' . Locale::translate('editor.issues.backIssues') . ' ------';
00202 foreach ($issues as $issue) {
00203 $issueOptions[$issue->getIssueId()] = $issue->getIssueIdentification();
00204 }
00205
00206 return $issueOptions;
00207 }
00208
00209 }
00210
00211 ?>