function authors($args, $request)
{
$this->validate(null, $request);
$this->setupTemplate($request);
$journal = $request->getJournal();
$authorDao = DAORegistry::getDAO('AuthorDAO');
if (isset($args[0]) && $args[0] == 'view') {
// View a specific author
$firstName = $request->getUserVar('firstName');
$middleName = $request->getUserVar('middleName');
$lastName = $request->getUserVar('lastName');
$affiliation = $request->getUserVar('affiliation');
$country = $request->getUserVar('country');
$publishedArticles = $authorDao->getPublishedArticlesForAuthor($journal ? $journal->getId() : null, $firstName, $middleName, $lastName, $affiliation, $country);
// Load information associated with each article.
$journals = array();
$issues = array();
$sections = array();
$issuesUnavailable = array();
$issueDao = DAORegistry::getDAO('IssueDAO');
$sectionDao = DAORegistry::getDAO('SectionDAO');
$journalDao = DAORegistry::getDAO('JournalDAO');
foreach ($publishedArticles as $article) {
$articleId = $article->getId();
$issueId = $article->getIssueId();
$sectionId = $article->getSectionId();
$journalId = $article->getJournalId();
if (!isset($issues[$issueId])) {
import('classes.issue.IssueAction');
$issue = $issueDao->getById($issueId);
$issues[$issueId] = $issue;
$issueAction = new IssueAction();
$issuesUnavailable[$issueId] = $issueAction->subscriptionRequired($issue) && (!$issueAction->subscribedUser($journal, $issueId, $articleId) && !$issueAction->subscribedDomain($journal, $issueId, $articleId));
}
if (!isset($journals[$journalId])) {
$journals[$journalId] = $journalDao->getById($journalId);
}
if (!isset($sections[$sectionId])) {
$sections[$sectionId] = $sectionDao->getById($sectionId, $journalId, true);
}
}
if (empty($publishedArticles)) {
$request->redirect(null, $request->getRequestedPage());
}
$templateMgr = TemplateManager::getManager($request);
$templateMgr->assign(array('publishedArticles' => $publishedArticles, 'issues' => $issues, 'issuesUnavailable' => $issuesUnavailable, 'sections' => $sections, 'journals' => $journals, 'firstName' => $firstName, 'middleName' => $middleName, 'lastName' => $lastName, 'affiliation' => $affiliation));
$countryDao = DAORegistry::getDAO('CountryDAO');
$country = $countryDao->getCountry($country);
$templateMgr->assign('country', $country);
$templateMgr->display('frontend/pages/searchAuthorDetails.tpl');
} else {
// Show the author index
$searchInitial = $request->getUserVar('searchInitial');
$rangeInfo = $this->getRangeInfo($request, 'authors');
$authors = $authorDao->getAuthorsAlphabetizedByJournal(isset($journal) ? $journal->getId() : null, $searchInitial, $rangeInfo);
$templateMgr = TemplateManager::getManager($request);
$templateMgr->assign(array('searchInitial' => $request->getUserVar('searchInitial'), 'alphaList' => explode(' ', __('common.alphaList')), 'authors' => $authors));
$templateMgr->display('frontend/pages/searchAuthorIndex.tpl');
}
}