83 lines
3.1 KiB
PHP
83 lines
3.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file pages/sitemap/SitemapHandler.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class SitemapHandler
|
|
*
|
|
* @ingroup pages_sitemap
|
|
*
|
|
* @brief Produce a sitemap in XML format for submitting to search engines.
|
|
*/
|
|
|
|
namespace APP\pages\sitemap;
|
|
|
|
use APP\facades\Repo;
|
|
use APP\issue\Collector;
|
|
use APP\submission\Submission;
|
|
use PKP\pages\sitemap\PKPSitemapHandler;
|
|
use PKP\plugins\Hook;
|
|
|
|
class SitemapHandler extends PKPSitemapHandler
|
|
{
|
|
/**
|
|
* @copydoc PKPSitemapHandler_createContextSitemap()
|
|
*/
|
|
public function _createContextSitemap($request)
|
|
{
|
|
$doc = parent::_createContextSitemap($request);
|
|
$root = $doc->documentElement;
|
|
|
|
$journal = $request->getJournal();
|
|
$journalId = $journal->getId();
|
|
|
|
// Search
|
|
$root->appendChild($this->_createUrlTree($doc, $request->url($journal->getPath(), 'search')));
|
|
// Issues
|
|
if ($journal->getData('publishingMode') != \APP\journal\Journal::PUBLISHING_MODE_NONE) {
|
|
$root->appendChild($this->_createUrlTree($doc, $request->url($journal->getPath(), 'issue', 'current')));
|
|
$root->appendChild($this->_createUrlTree($doc, $request->url($journal->getPath(), 'issue', 'archive')));
|
|
$publishedIssues = Repo::issue()->getCollector()
|
|
->filterByContextIds([$journalId])
|
|
->filterByPublished(true)
|
|
->orderBy(Collector::ORDERBY_PUBLISHED_ISSUES)
|
|
->getMany();
|
|
foreach ($publishedIssues as $issue) {
|
|
$root->appendChild($this->_createUrlTree($doc, $request->url($journal->getPath(), 'issue', 'view', $issue->getId())));
|
|
// Articles for issue
|
|
$submissions = Repo::submission()
|
|
->getCollector()
|
|
->filterByContextIds([$journal->getId()])
|
|
->filterByIssueIds([$issue->getId()])
|
|
->filterByStatus([Submission::STATUS_PUBLISHED])
|
|
->getMany();
|
|
|
|
foreach ($submissions as $submission) {
|
|
// Abstract
|
|
$root->appendChild($this->_createUrlTree($doc, $request->url($journal->getPath(), 'article', 'view', [$submission->getBestId()])));
|
|
// Galley files
|
|
$galleys = Repo::galley()
|
|
->getCollector()
|
|
->filterByPublicationIds([($submission->getCurrentPublication()->getId())])
|
|
->getMany();
|
|
|
|
foreach ($galleys as $galley) {
|
|
$root->appendChild($this->_createUrlTree($doc, $request->url($journal->getPath(), 'article', 'view', [$submission->getBestId(), $galley->getBestGalleyId()])));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$doc->appendChild($root);
|
|
|
|
// Enable plugins to change the sitemap
|
|
Hook::call('SitemapHandler::createJournalSitemap', [&$doc]);
|
|
|
|
return $doc;
|
|
}
|
|
}
|