00001 <?php
00002
00015
00016
00017
00018 class EmailHandler extends UserHandler {
00019 function email($args) {
00020 parent::validate();
00021
00022 parent::setupTemplate(true);
00023
00024 $templateMgr = &TemplateManager::getManager();
00025
00026 $userDao = &DAORegistry::getDAO('UserDAO');
00027
00028 $journal = &Request::getJournal();
00029 $user = &Request::getUser();
00030
00031
00032 $template = Request::getUserVar('template');
00033 if ( !$journal || empty($template) || (
00034 !Validation::isJournalManager($journal->getJournalId()) &&
00035 !Validation::isEditor($journal->getJournalId()) &&
00036 !Validation::isSectionEditor($journal->getJournalId())
00037 )) {
00038 $template = null;
00039 }
00040
00041
00042
00043 $canSendUnlimitedEmails = Validation::isSiteAdmin();
00044 $unlimitedEmailRoles = array(
00045 ROLE_ID_JOURNAL_MANAGER,
00046 ROLE_ID_EDITOR,
00047 ROLE_ID_SECTION_EDITOR
00048 );
00049 $roleDao =& DAORegistry::getDAO('RoleDAO');
00050 if ($journal) {
00051 $roles =& $roleDao->getRolesByUserId($user->getUserId(), $journal->getJournalId());
00052 foreach ($roles as $role) {
00053 if (in_array($role->getRoleId(), $unlimitedEmailRoles)) $canSendUnlimitedEmails = true;
00054 }
00055 }
00056
00057
00058
00059 if (!$canSendUnlimitedEmails) {
00060 $dateLastEmail = $user->getDateLastEmail();
00061 if ($dateLastEmail && strtotime($dateLastEmail) + ((int) Config::getVar('email', 'time_between_emails')) > strtotime(Core::getCurrentDate())) {
00062 $templateMgr->assign('pageTitle', 'email.compose');
00063 $templateMgr->assign('message', 'email.compose.tooSoon');
00064 $templateMgr->assign('backLink', 'javascript:history.back()');
00065 $templateMgr->assign('backLinkLabel', 'email.compose');
00066 return $templateMgr->display('common/message.tpl');
00067 }
00068 }
00069
00070 $email = null;
00071 if ($articleId = Request::getUserVar('articleId')) {
00072
00073
00074
00075
00076 $articleDao =& DAORegistry::getDAO('ArticleDAO');
00077
00078 $article =& $articleDao->getArticle($articleId);
00079 $hasAccess = false;
00080
00081
00082
00083 if ($article && $article->getUserId() == $user->getUserId()) $hasAccess = true;
00084
00085 $editAssignmentDao =& DAORegistry::getDAO('EditAssignmentDAO');
00086 $editAssignments =& $editAssignmentDao->getEditAssignmentsByArticleId($articleId);
00087 while ($editAssignment =& $editAssignments->next()) {
00088 if ($editAssignment->getEditorId() === $user->getUserId()) $hasAccess = true;
00089 }
00090 if (Validation::isEditor($journal->getJournalId())) $hasAccess = true;
00091
00092
00093 $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
00094 foreach ($reviewAssignmentDao->getReviewAssignmentsByArticleId($articleId) as $reviewAssignment) {
00095 if ($reviewAssignment->getReviewerId() === $user->getUserId()) $hasAccess = true;
00096 }
00097
00098 $copyAssignmentDao =& DAORegistry::getDAO('CopyAssignmentDAO');
00099 $copyAssignment =& $copyAssignmentDao->getCopyAssignmentByArticleId($articleId);
00100 if ($copyAssignment && $copyAssignment->getCopyeditorId() === $user->getUserId()) $hasAccess = true;
00101
00102 $layoutAssignmentDao =& DAORegistry::getDAO('LayoutAssignmentDAO');
00103 $layoutAssignment =& $layoutAssignmentDao->getLayoutAssignmentByArticleId($articleId);
00104 if ($layoutAssignment && $layoutAssignment->getEditorId() === $user->getUserId()) $hasAccess = true;
00105
00106 $proofAssignmentDao =& DAORegistry::getDAO('ProofAssignmentDAO');
00107 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($articleId);
00108 if ($proofAssignment && $proofAssignment->getProofreaderId() === $user->getUserId()) $hasAccess = true;
00109
00110
00111 if (!$article || ($article && $article->getJournalId() !== $journal->getJournalId())) $hasAccess = false;
00112
00113 if ($hasAccess) {
00114 import('mail.ArticleMailTemplate');
00115 $email =& new ArticleMailTemplate($articleDao->getArticle($articleId, $template));
00116 }
00117 }
00118
00119 if ($email === null) {
00120 import('mail.MailTemplate');
00121 $email = &new MailTemplate($template);
00122 }
00123
00124 if (Request::getUserVar('send') && !$email->hasErrors()) {
00125 $recipients = $email->getRecipients();
00126 $ccs = $email->getCcs();
00127 $bccs = $email->getBccs();
00128
00129
00130
00131 $recipientCount = 0;
00132 if (is_array($recipients)) $recipientCount += count($recipients);
00133 if (is_array($ccs)) $recipientCount += count($ccs);
00134 if (is_array($bccs)) $recipientCount += count($bccs);
00135
00136 if (!$canSendUnlimitedEmails && $recipientCount > ((int) Config::getVar('email', 'max_recipients'))) {
00137 $templateMgr->assign('pageTitle', 'email.compose');
00138 $templateMgr->assign('message', 'email.compose.tooManyRecipients');
00139 $templateMgr->assign('backLink', 'javascript:history.back()');
00140 $templateMgr->assign('backLinkLabel', 'email.compose');
00141 return $templateMgr->display('common/message.tpl');
00142 }
00143 $email->send();
00144 $redirectUrl = Request::getUserVar('redirectUrl');
00145 if (empty($redirectUrl)) $redirectUrl = Request::url(null, 'user');
00146 $user->setDateLastEmail(Core::getCurrentDate());
00147 $userDao->updateUser($user);
00148 Request::redirectUrl($redirectUrl);
00149 } else {
00150 $email->displayEditForm(Request::url(null, null, 'email'), array('redirectUrl' => Request::getUserVar('redirectUrl'), 'articleId' => $articleId), null, array('disableSkipButton' => true, 'articleId' => $articleId));
00151 }
00152 }
00153 }
00154
00155 ?>