00001 <?php
00002
00015
00016
00017
00018 import('sectionEditor.SectionEditorHandler');
00019
00020 define('EDITOR_SECTION_HOME', 0);
00021 define('EDITOR_SECTION_SUBMISSIONS', 1);
00022 define('EDITOR_SECTION_ISSUES', 2);
00023
00024
00025 define('FILTER_EDITOR_ALL', 0);
00026 define('FILTER_EDITOR_ME', 1);
00027
00028 import ('submission.editor.EditorAction');
00029
00030 class EditorHandler extends SectionEditorHandler {
00031
00036 function index($args) {
00037 EditorHandler::validate();
00038 EditorHandler::setupTemplate(EDITOR_SECTION_HOME);
00039
00040 $templateMgr = &TemplateManager::getManager();
00041 $journal = &Request::getJournal();
00042 $journalId = $journal->getJournalId();
00043 $user = &Request::getUser();
00044
00045 $editorSubmissionDao = &DAORegistry::getDAO('EditorSubmissionDAO');
00046 $sectionDao = &DAORegistry::getDAO('SectionDAO');
00047
00048 $sections = &$sectionDao->getSectionTitles($journal->getJournalId());
00049 $templateMgr->assign('sectionOptions', array(0 => Locale::Translate('editor.allSections')) + $sections);
00050 $templateMgr->assign('fieldOptions', EditorHandler::getSearchFieldOptions());
00051 $templateMgr->assign('dateFieldOptions', EditorHandler::getDateFieldOptions());
00052
00053
00054 import('issue.IssueAction');
00055 $issueAction = &new IssueAction();
00056 $templateMgr->register_function('print_issue_id', array($issueAction, 'smartyPrintIssueId'));
00057
00058
00059 if (array_shift($args) == 'search') {
00060 $rangeInfo = Handler::getRangeInfo('submissions');
00061
00062
00063 $searchField = Request::getUserVar('searchField');
00064 $dateSearchField = Request::getUserVar('dateSearchField');
00065 $searchMatch = Request::getUserVar('searchMatch');
00066 $search = Request::getUserVar('search');
00067
00068 $fromDate = Request::getUserDateVar('dateFrom', 1, 1);
00069 if ($fromDate !== null) $fromDate = date('Y-m-d H:i:s', $fromDate);
00070 $toDate = Request::getUserDateVar('dateTo', 32, 12, null, 23, 59, 59);
00071 if ($toDate !== null) $toDate = date('Y-m-d H:i:s', $toDate);
00072 $rawSubmissions = &$editorSubmissionDao->getUnfilteredEditorSubmissions(
00073 $journal->getJournalId(),
00074 Request::getUserVar('section'),
00075 0,
00076 $searchField,
00077 $searchMatch,
00078 $search,
00079 $dateSearchField,
00080 $fromDate,
00081 $toDate,
00082 null,
00083 $rangeInfo
00084 );
00085
00086
00087 $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
00088 $submissions = &new DAOResultFactory($rawSubmissions, $sectionEditorSubmissionDao, '_returnSectionEditorSubmissionFromRow');
00089
00090
00091 $templateMgr->assign_by_ref('submissions', $submissions);
00092 $templateMgr->assign('section', Request::getUserVar('section'));
00093
00094
00095 foreach (EditorHandler::getSearchFormDuplicateParameters() as $param)
00096 $templateMgr->assign($param, Request::getUserVar($param));
00097
00098 $templateMgr->assign('dateFrom', $fromDate);
00099 $templateMgr->assign('dateTo', $toDate);
00100 $templateMgr->assign('displayResults', true);
00101 }
00102
00103 $submissionsCount = &$editorSubmissionDao->getEditorSubmissionsCount($journal->getJournalId());
00104 $templateMgr->assign('submissionsCount', $submissionsCount);
00105 $templateMgr->assign('helpTopicId', 'editorial.editorsRole');
00106 $templateMgr->display('editor/index.tpl');
00107 }
00108
00112 function submissions($args) {
00113 EditorHandler::validate();
00114 EditorHandler::setupTemplate(EDITOR_SECTION_SUBMISSIONS);
00115
00116 $journal = &Request::getJournal();
00117 $journalId = $journal->getJournalId();
00118 $user = &Request::getUser();
00119
00120 $editorSubmissionDao = &DAORegistry::getDAO('EditorSubmissionDAO');
00121 $sectionDao = &DAORegistry::getDAO('SectionDAO');
00122
00123 $page = isset($args[0]) ? $args[0] : '';
00124 $sections = &$sectionDao->getSectionTitles($journalId);
00125
00126 $filterEditorOptions = array(
00127 FILTER_EDITOR_ALL => Locale::Translate('editor.allEditors'),
00128 FILTER_EDITOR_ME => Locale::Translate('editor.me')
00129 );
00130
00131 $filterSectionOptions = array(
00132 FILTER_SECTION_ALL => Locale::Translate('editor.allSections')
00133 ) + $sections;
00134
00135
00136 $searchField = Request::getUserVar('searchField');
00137 $dateSearchField = Request::getUserVar('dateSearchField');
00138 $searchMatch = Request::getUserVar('searchMatch');
00139 $search = Request::getUserVar('search');
00140
00141 $fromDate = Request::getUserDateVar('dateFrom', 1, 1);
00142 if ($fromDate !== null) $fromDate = date('Y-m-d H:i:s', $fromDate);
00143 $toDate = Request::getUserDateVar('dateTo', 32, 12, null, 23, 59, 59);
00144 if ($toDate !== null) $toDate = date('Y-m-d H:i:s', $toDate);
00145
00146 $rangeInfo = Handler::getRangeInfo('submissions');
00147
00148 switch($page) {
00149 case 'submissionsUnassigned':
00150 $functionName = 'getEditorSubmissionsUnassigned';
00151 $helpTopicId = 'editorial.editorsRole.submissions.unassigned';
00152 break;
00153 case 'submissionsInEditing':
00154 $functionName = 'getEditorSubmissionsInEditing';
00155 $helpTopicId = 'editorial.editorsRole.submissions.inEditing';
00156 break;
00157 case 'submissionsArchives':
00158 $functionName = 'getEditorSubmissionsArchives';
00159 $helpTopicId = 'editorial.editorsRole.submissions.archives';
00160 break;
00161 default:
00162 $page = 'submissionsInReview';
00163 $functionName = 'getEditorSubmissionsInReview';
00164 $helpTopicId = 'editorial.editorsRole.submissions.inReview';
00165 }
00166
00167 $filterEditor = Request::getUserVar('filterEditor');
00168 if ($filterEditor != '' && array_key_exists($filterEditor, $filterEditorOptions)) {
00169 $user->updateSetting('filterEditor', $filterEditor, 'int', $journalId);
00170 } else {
00171 $filterEditor = $user->getSetting('filterEditor', $journalId);
00172 if ($filterEditor == null) {
00173 $filterEditor = FILTER_EDITOR_ALL;
00174 $user->updateSetting('filterEditor', $filterEditor, 'int', $journalId);
00175 }
00176 }
00177
00178 if ($filterEditor == FILTER_EDITOR_ME) {
00179 $editorId = $user->getUserId();
00180 } else {
00181 $editorId = FILTER_EDITOR_ALL;
00182 }
00183
00184 $filterSection = Request::getUserVar('filterSection');
00185 if ($filterSection != '' && array_key_exists($filterSection, $filterSectionOptions)) {
00186 $user->updateSetting('filterSection', $filterSection, 'int', $journalId);
00187 } else {
00188 $filterSection = $user->getSetting('filterSection', $journalId);
00189 if ($filterSection == null) {
00190 $filterSection = FILTER_SECTION_ALL;
00191 $user->updateSetting('filterSection', $filterSection, 'int', $journalId);
00192 }
00193 }
00194
00195 $submissions = &$editorSubmissionDao->$functionName(
00196 $journalId,
00197 $filterSection,
00198 $editorId,
00199 $searchField,
00200 $searchMatch,
00201 $search,
00202 $dateSearchField,
00203 $fromDate,
00204 $toDate,
00205 $rangeInfo);
00206
00207 $templateMgr = &TemplateManager::getManager();
00208 $templateMgr->assign('pageToDisplay', $page);
00209 $templateMgr->assign('editor', $user->getFullName());
00210 $templateMgr->assign('editorOptions', $filterEditorOptions);
00211 $templateMgr->assign('sectionOptions', $filterSectionOptions);
00212
00213 $templateMgr->assign_by_ref('submissions', $submissions);
00214 $templateMgr->assign('filterEditor', $filterEditor);
00215 $templateMgr->assign('filterSection', $filterSection);
00216
00217
00218 foreach (EditorHandler::getSearchFormDuplicateParameters() as $param)
00219 $templateMgr->assign($param, Request::getUserVar($param));
00220
00221 $templateMgr->assign('dateFrom', $fromDate);
00222 $templateMgr->assign('dateTo', $toDate);
00223 $templateMgr->assign('fieldOptions', EditorHandler::getSearchFieldOptions());
00224 $templateMgr->assign('dateFieldOptions', EditorHandler::getDateFieldOptions());
00225
00226 import('issue.IssueAction');
00227 $issueAction = &new IssueAction();
00228 $templateMgr->register_function('print_issue_id', array($issueAction, 'smartyPrintIssueId'));
00229
00230 $templateMgr->assign('helpTopicId', $helpTopicId);
00231 $templateMgr->display('editor/submissions.tpl');
00232 }
00233
00234 function updateSubmissionArchive() {
00235 EditorHandler::submissionArchive();
00236 }
00237
00244 function getSearchFormDuplicateParameters() {
00245 return array(
00246 'searchField', 'searchMatch', 'search',
00247 'dateFromMonth', 'dateFromDay', 'dateFromYear',
00248 'dateToMonth', 'dateToDay', 'dateToYear',
00249 'dateSearchField'
00250 );
00251 }
00252
00257 function getSearchFieldOptions() {
00258 return array(
00259 SUBMISSION_FIELD_TITLE => 'article.title',
00260 SUBMISSION_FIELD_AUTHOR => 'user.role.author',
00261 SUBMISSION_FIELD_EDITOR => 'user.role.editor',
00262 SUBMISSION_FIELD_REVIEWER => 'user.role.reviewer',
00263 SUBMISSION_FIELD_COPYEDITOR => 'user.role.copyeditor',
00264 SUBMISSION_FIELD_LAYOUTEDITOR => 'user.role.layoutEditor',
00265 SUBMISSION_FIELD_PROOFREADER => 'user.role.proofreader'
00266 );
00267 }
00268
00273 function getDateFieldOptions() {
00274 return array(
00275 SUBMISSION_FIELD_DATE_SUBMITTED => 'submissions.submitted',
00276 SUBMISSION_FIELD_DATE_COPYEDIT_COMPLETE => 'submissions.copyeditComplete',
00277 SUBMISSION_FIELD_DATE_LAYOUT_COMPLETE => 'submissions.layoutComplete',
00278 SUBMISSION_FIELD_DATE_PROOFREADING_COMPLETE => 'submissions.proofreadingComplete'
00279 );
00280 }
00281
00285 function setEditorFlags($args) {
00286 EditorHandler::validate();
00287
00288 $journal = &Request::getJournal();
00289 $articleId = (int) Request::getUserVar('articleId');
00290
00291 $articleDao =& DAORegistry::getDAO('ArticleDAO');
00292 $article =& $articleDao->getArticle($articleId);
00293
00294 if ($article && $article->getJournalId() === $journal->getJournalId()) {
00295 $editAssignmentDao =& DAORegistry::getDAO('EditAssignmentDAO');
00296 $editAssignments =& $editAssignmentDao->getEditAssignmentsByArticleId($articleId);
00297
00298 while($editAssignment =& $editAssignments->next()) {
00299 if ($editAssignment->getIsEditor()) continue;
00300
00301 $canReview = Request::getUserVar('canReview-' . $editAssignment->getEditId()) ? 1 : 0;
00302 $canEdit = Request::getUserVar('canEdit-' . $editAssignment->getEditId()) ? 1 : 0;
00303
00304 $editAssignment->setCanReview($canReview);
00305 $editAssignment->setCanEdit($canEdit);
00306
00307 $editAssignmentDao->updateEditAssignment($editAssignment);
00308 }
00309 }
00310
00311 Request::redirect(null, null, 'submission', $articleId);
00312 }
00313
00317 function deleteEditAssignment($args) {
00318 EditorHandler::validate();
00319
00320 $journal = &Request::getJournal();
00321 $editId = (int) (isset($args[0])?$args[0]:0);
00322
00323 $editAssignmentDao =& DAORegistry::getDAO('EditAssignmentDAO');
00324 $editAssignment =& $editAssignmentDao->getEditAssignment($editId);
00325
00326 if ($editAssignment) {
00327 $articleDao =& DAORegistry::getDAO('ArticleDAO');
00328 $article =& $articleDao->getArticle($editAssignment->getArticleId());
00329
00330 if ($article && $article->getJournalId() === $journal->getJournalId()) {
00331 $editAssignmentDao->deleteEditAssignmentById($editAssignment->getEditId());
00332 Request::redirect(null, null, 'submission', $article->getArticleId());
00333 }
00334 }
00335
00336 Request::redirect(null, null, 'submissions');
00337 }
00338
00342 function assignEditor($args) {
00343 EditorHandler::validate();
00344
00345 $journal = &Request::getJournal();
00346 $articleId = Request::getUserVar('articleId');
00347 $editorId = Request::getUserVar('editorId');
00348 $roleDao = &DAORegistry::getDAO('RoleDAO');
00349
00350 $isSectionEditor = $roleDao->roleExists($journal->getJournalId(), $editorId, ROLE_ID_SECTION_EDITOR);
00351 $isEditor = $roleDao->roleExists($journal->getJournalId(), $editorId, ROLE_ID_EDITOR);
00352
00353 if (isset($editorId) && $editorId != null && ($isEditor || $isSectionEditor)) {
00354
00355
00356
00357
00358
00359 EditorHandler::setupTemplate(EDITOR_SECTION_SUBMISSIONS, $articleId, 'summary');
00360
00361
00362 if (EditorAction::assignEditor($articleId, $editorId, $isEditor, Request::getUserVar('send'))) {
00363 Request::redirect(null, null, 'submission', $articleId);
00364 }
00365 } else {
00366
00367 EditorHandler::setupTemplate(EDITOR_SECTION_SUBMISSIONS, $articleId, 'summary');
00368
00369 $searchType = null;
00370 $searchMatch = null;
00371 $search = Request::getUserVar('search');
00372 $searchInitial = Request::getUserVar('searchInitial');
00373 if (isset($search)) {
00374 $searchType = Request::getUserVar('searchField');
00375 $searchMatch = Request::getUserVar('searchMatch');
00376
00377 } else if (isset($searchInitial)) {
00378 $searchInitial = String::strtoupper($searchInitial);
00379 $searchType = USER_FIELD_INITIAL;
00380 $search = $searchInitial;
00381 }
00382
00383 $rangeInfo = &Handler::getRangeInfo('editors');
00384 $editorSubmissionDao = &DAORegistry::getDAO('EditorSubmissionDAO');
00385
00386 if (isset($args[0]) && $args[0] === 'editor') {
00387 $roleName = 'user.role.editor';
00388 $editors = &$editorSubmissionDao->getUsersNotAssignedToArticle($journal->getJournalId(), $articleId, RoleDAO::getRoleIdFromPath('editor'), $searchType, $search, $searchMatch, $rangeInfo);
00389 } else {
00390 $roleName = 'user.role.sectionEditor';
00391 $editors = &$editorSubmissionDao->getUsersNotAssignedToArticle($journal->getJournalId(), $articleId, RoleDAO::getRoleIdFromPath('sectionEditor'), $searchType, $search, $searchMatch, $rangeInfo);
00392 }
00393
00394 $templateMgr = &TemplateManager::getManager();
00395
00396 $templateMgr->assign_by_ref('editors', $editors);
00397 $templateMgr->assign('roleName', $roleName);
00398 $templateMgr->assign('articleId', $articleId);
00399
00400 $sectionDao = &DAORegistry::getDAO('SectionDAO');
00401 $sectionEditorSections = &$sectionDao->getEditorSections($journal->getJournalId());
00402
00403 $editAssignmentDao = &DAORegistry::getDAO('EditAssignmentDAO');
00404 $editorStatistics = $editAssignmentDao->getEditorStatistics($journal->getJournalId());
00405
00406 $templateMgr->assign_by_ref('editorSections', $sectionEditorSections);
00407 $templateMgr->assign('editorStatistics', $editorStatistics);
00408
00409 $templateMgr->assign('searchField', $searchType);
00410 $templateMgr->assign('searchMatch', $searchMatch);
00411 $templateMgr->assign('search', $search);
00412 $templateMgr->assign('searchInitial', Request::getUserVar('searchInitial'));
00413
00414 $templateMgr->assign('fieldOptions', Array(
00415 USER_FIELD_FIRSTNAME => 'user.firstName',
00416 USER_FIELD_LASTNAME => 'user.lastName',
00417 USER_FIELD_USERNAME => 'user.username',
00418 USER_FIELD_EMAIL => 'user.email'
00419 ));
00420 $templateMgr->assign('alphaList', explode(' ', Locale::translate('common.alphaList')));
00421 $templateMgr->assign('helpTopicId', 'editorial.editorsRole.submissionSummary.submissionManagement');
00422 $templateMgr->display('editor/selectSectionEditor.tpl');
00423 }
00424 }
00425
00429 function deleteSubmission($args) {
00430 $articleId = isset($args[0]) ? (int) $args[0] : 0;
00431 EditorHandler::validate($articleId);
00432 parent::setupTemplate(true);
00433
00434 $journal = &Request::getJournal();
00435
00436 $articleDao = &DAORegistry::getDAO('ArticleDAO');
00437 $article = &$articleDao->getArticle($articleId);
00438
00439 $status = $article->getStatus();
00440
00441 if ($article->getJournalId() == $journal->getJournalId() && ($status == STATUS_DECLINED || $status == STATUS_ARCHIVED)) {
00442
00443 import('file.ArticleFileManager');
00444 $articleFileManager = &new ArticleFileManager($articleId);
00445 $articleFileManager->deleteArticleTree();
00446
00447
00448 $articleDao->deleteArticleById($articleId);
00449 }
00450
00451 Request::redirect(null, null, 'submissions', 'submissionsArchives');
00452 }
00453
00458 function validate() {
00459 $journal = &Request::getJournal();
00460 if (!isset($journal) || !Validation::isEditor($journal->getJournalId())) {
00461 Validation::redirectLogin();
00462 }
00463 }
00464
00469 function setupTemplate($level = EDITOR_SECTION_HOME, $articleId = 0, $parentPage = null) {
00470
00471
00472 $isLayoutEditor = Request::getRequestedPage() == 'layoutEditor';
00473
00474 $journal =& Request::getJournal();
00475 $templateMgr =& TemplateManager::getManager();
00476
00477 if ($level==EDITOR_SECTION_HOME) $pageHierarchy = array(array(Request::url(null, 'user'), 'navigation.user'));
00478 else if ($level==EDITOR_SECTION_SUBMISSIONS) $pageHierarchy = array(array(Request::url(null, 'user'), 'navigation.user'), array(Request::url(null, 'editor'), 'user.role.editor'), array(Request::url(null, 'editor', 'submissions'), 'article.submissions'));
00479 else if ($level==EDITOR_SECTION_ISSUES) $pageHierarchy = array(array(Request::url(null, 'user'), 'navigation.user'), array(Request::url(null, $isLayoutEditor?'layoutEditor':'editor'), $isLayoutEditor?'user.role.layoutEditor':'user.role.editor'), array(Request::url(null, $isLayoutEditor?'layoutEditor':'editor', 'futureIssues'), 'issue.issues'));
00480
00481 import('submission.sectionEditor.SectionEditorAction');
00482 $submissionCrumb = SectionEditorAction::submissionBreadcrumb($articleId, $parentPage, 'editor');
00483 if (isset($submissionCrumb)) {
00484 $pageHierarchy = array_merge($pageHierarchy, $submissionCrumb);
00485 }
00486 $templateMgr->assign('pageHierarchy', $pageHierarchy);
00487 }
00488
00489
00490
00491
00492 function futureIssues() {
00493 import('pages.editor.IssueManagementHandler');
00494 IssueManagementHandler::futureIssues();
00495 }
00496
00497 function backIssues() {
00498 import('pages.editor.IssueManagementHandler');
00499 IssueManagementHandler::backIssues();
00500 }
00501
00502 function removeIssue($args) {
00503 import('pages.editor.IssueManagementHandler');
00504 IssueManagementHandler::removeIssue($args);
00505 Request::redirect(null, null, 'issueToc');
00506 }
00507
00508 function createIssue() {
00509 import('pages.editor.IssueManagementHandler');
00510 IssueManagementHandler::createIssue();
00511 }
00512
00513 function saveIssue() {
00514 import('pages.editor.IssueManagementHandler');
00515 IssueManagementHandler::saveIssue();
00516 }
00517
00518 function issueData($args) {
00519 import('pages.editor.IssueManagementHandler');
00520 IssueManagementHandler::issueData($args);
00521 }
00522
00523 function editIssue($args) {
00524 import('pages.editor.IssueManagementHandler');
00525 IssueManagementHandler::editIssue($args);
00526 }
00527
00528 function removeIssueCoverPage($args) {
00529 import('pages.editor.IssueManagementHandler');
00530 IssueManagementHandler::removeCoverPage($args);
00531 }
00532
00533 function removeStyleFile($args) {
00534 import('pages.editor.IssueManagementHandler');
00535 IssueManagementHandler::removeStyleFile($args);
00536 }
00537
00538 function issueToc($args) {
00539 import('pages.editor.IssueManagementHandler');
00540 IssueManagementHandler::issueToc($args);
00541 }
00542
00543 function updateIssueToc($args) {
00544 import('pages.editor.IssueManagementHandler');
00545 IssueManagementHandler::updateIssueToc($args);
00546 }
00547
00548 function setCurrentIssue($args) {
00549 import('pages.editor.IssueManagementHandler');
00550 IssueManagementHandler::setCurrentIssue($args);
00551 }
00552
00553 function moveIssue($args) {
00554 import('pages.editor.IssueManagementHandler');
00555 IssueManagementHandler::moveIssue($args);
00556 }
00557
00558 function resetIssueOrder($args) {
00559 import('pages.editor.IssueManagementHandler');
00560 IssueManagementHandler::resetIssueOrder($args);
00561 }
00562
00563 function moveSectionToc($args) {
00564 import('pages.editor.IssueManagementHandler');
00565 IssueManagementHandler::moveSectionToc($args);
00566 }
00567
00568 function resetSectionOrder($args) {
00569 import('pages.editor.IssueManagementHandler');
00570 IssueManagementHandler::resetSectionOrder($args);
00571 }
00572
00573
00574 function moveArticleToc($args) {
00575 import('pages.editor.IssueManagementHandler');
00576 IssueManagementHandler::moveArticleToc($args);
00577 }
00578
00579 function publishIssue($args) {
00580 import('pages.editor.IssueManagementHandler');
00581 IssueManagementHandler::publishIssue($args);
00582 }
00583
00584 function notifyUsers($args) {
00585 import('pages.editor.IssueManagementHandler');
00586 IssueManagementHandler::notifyUsers($args);
00587 }
00588
00589 }
00590
00591 ?>