/** * @copydoc SubmissionListGridHandler::getSubmissions() */ function getSubmissions($request, $userId) { $submissionDao = Application::getSubmissionDAO(); /* @var $submissionDao SubmissionDAO */ // Determine whether this is a Sub Editor or Manager. // Managers can access all submissions, Sub Editors // only assigned submissions. $user = $request->getUser(); // Get all submissions for all contexts that user is // enrolled in as manager or series editor. $roleDao = DAORegistry::getDAO('RoleDAO'); $contextDao = Application::getContextDAO(); $contexts = $contextDao->getAll(); $accessibleContexts = array(); while ($context = $contexts->next()) { $isManager = $roleDao->userHasRole($context->getId(), $userId, ROLE_ID_MANAGER); $isSubEditor = $roleDao->userHasRole($context->getId(), $userId, ROLE_ID_SUB_EDITOR); if (!$isManager && !$isSubEditor) { continue; } $accessibleContexts[] = $context->getId(); } $accessibleSubmissions = array(); // Don't use range info to retrieve the object, because we do // some more filtering below, and that would end up breaking // the range info. FIXME: to speed up the process, do all // the filtering needed in SQL and use range info here. $submissionFactory = $submissionDao->getBySubEditorId($accessibleContexts, null, false, false); if (!$submissionFactory->wasEmpty()) { $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); while ($submission = $submissionFactory->next()) { if (!$stageAssignmentDao->editorAssignedToStage($submission->getId())) { $accessibleSubmissions[$submission->getId()] = $submission; } } } $rangeInfo = $this->getGridRangeInfo($request, $this->getId()); import('lib.pkp.classes.core.VirtualArrayIterator'); return VirtualArrayIterator::factory($accessibleSubmissions, $rangeInfo); }
function display(&$args, $request) { $templateMgr = TemplateManager::getManager($request); parent::display($args, $request); $issueDao = DAORegistry::getDAO('IssueDAO'); $journal = $request->getJournal(); switch (array_shift($args)) { case 'exportIssues': $issueIds = $request->getUserVar('issueId'); if (!isset($issueIds)) { $issueIds = array(); } $issues = array(); foreach ($issueIds as $issueId) { $issue = $issueDao->getById($issueId); if (!$issue) { $request->redirect(); } $issues[] = $issue; } $this->exportIssues($journal, $issues); break; case 'exportIssue': $issueId = array_shift($args); $issue = $issueDao->getById($issueId); if (!$issue) { $request->redirect(); } $issues = array($issue); $this->exportIssues($journal, $issues); break; case 'exportArticle': $articleIds = array(array_shift($args)); $articleSearch = new ArticleSearch(); $result = $articleSearch->formatResults($articleIds); $this->exportArticles($journal, $result); break; case 'exportArticles': $articleIds = $request->getUserVar('articleId'); if (!isset($articleIds)) { $articleIds = array(); } $articleSearch = new ArticleSearch(); $results = $articleSearch->formatResults($articleIds); $this->exportArticles($journal, $results); break; case 'issues': // Display a list of issues for export // that contain an article with DOI AppLocale::requireComponents(LOCALE_COMPONENT_APP_EDITOR); $issueDao = DAORegistry::getDAO('IssueDAO'); $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO'); $allIssues = $issueDao->getPublishedIssues($journal->getId()); $issues = array(); $numArticles = array(); while ($issue = $allIssues->next()) { $issueArticles =& $publishedArticleDao->getPublishedArticles($issue->getId()); $issueArticlesNo = 0; foreach ($issueArticles as $issueArticle) { if ($issueArticle->getPubId('doi')) { if (!in_array($issue, $issues)) { $issues[] = $issue; } $issueArticlesNo++; } } $numArticles[$issue->getId()] = $issueArticlesNo; } // Paginate issues. $rangeInfo = Handler::getRangeInfo('issues'); import('lib.pkp.classes.core.VirtualArrayIterator'); $iterator = VirtualArrayIterator::factory($issues, $rangeInfo); $templateMgr->assign('issues', $iterator); $templateMgr->assign('numArticles', $numArticles); $templateMgr->display($this->getTemplatePath() . 'issues.tpl'); break; case 'articles': // Display a list of articles with DOI for export $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO'); $articleIterator = $publishedArticleDao->getPublishedArticlesByJournalId($journal->getId()); $articleIds = array(); while ($article = $articleIterator->next()) { // Check whether there is a DOI. if ($article->getPubId('doi')) { $articleIds[] = $article->getId(); } } // Paginate articles. $rangeInfo = Handler::getRangeInfo('articles'); import('lib.pkp.classes.core.VirtualArrayIterator'); $iterator = VirtualArrayIterator::factory(ArticleSearch::formatResults($articleIds), $rangeInfo); $templateMgr->assign_by_ref('articles', $iterator); $templateMgr->display($this->getTemplatePath() . 'articles.tpl'); break; default: $doiPrefix = null; $pubIdPlugins = PluginRegistry::loadCategory('pubIds', true); if (isset($pubIdPlugins['DOIPubIdPlugin'])) { $doiPrefix = $pubIdPlugins['DOIPubIdPlugin']->getSetting($journal->getId(), 'doiPrefix'); } $templateMgr->assign('doiPrefix', $doiPrefix); $templateMgr->display($this->getTemplatePath() . 'index.tpl'); } }