mediawiki-extensions-CiteTh.../CiteThisPage.hooks.php
Florian Schmidt c422031326 Add a possibility to add a "cite this page" link without adding the NS as a content namespace
Sometimes it's required or at least a good option to have a cite this page
link on pages, that aren't content pages (like the project namespace).

This change adds a new configuration option for this extensions to allow to
add namespaces as namespaces that should have a cite this page link, even if
they're not a content page.

Bug: T150053
Change-Id: I2523bd9124ab8998a7c327d8045d7585d4dcf8b4
2016-12-30 16:55:11 +01:00

63 lines
1.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
class CiteThisPageHooks {
/**
* @param SkinTemplate $skintemplate
* @param $nav_urls
* @param $oldid
* @param $revid
* @return bool
*/
public static function onSkinTemplateBuildNavUrlsNav_urlsAfterPermalink(
&$skintemplate, &$nav_urls, &$oldid, &$revid
) {
// check whether were in the right namespace, the $revid has the correct type and is not empty
// (which would mean that the current page doesnt exist)
$title = $skintemplate->getTitle();
if ( self::shouldAddLink( $title ) && $revid !== 0 && !empty( $revid ) ) {
$nav_urls['citethispage'] = [
'text' => $skintemplate->msg( 'citethispage-link' )->text(),
'href' => SpecialPage::getTitleFor( 'CiteThisPage' )
->getLocalURL( [ 'page' => $title->getPrefixedDBkey(), 'id' => $revid ] ),
'id' => 't-cite',
# Used message keys: 'tooltip-citethispage', 'accesskey-citethispage'
'single-id' => 'citethispage',
];
}
return true;
}
/**
* Checks, if the "cite this page" link should be added. By default the link is added to all
* pages in the main namespace, and additionally to pages, which are in one of the namespaces
* named in $wgCiteThisPageAddiotionalNamespaces.
*
* @param Title $title
* @return bool
*/
private static function shouldAddLink( Title $title ) {
global $wgCiteThisPageAdditionalNamespaces;
return $title->isContentPage() ||
(
isset( $wgCiteThisPageAdditionalNamespaces[$title->getNamespace()] ) &&
$wgCiteThisPageAdditionalNamespaces[$title->getNamespace()]
);
}
/**
* @param BaseTemplate $baseTemplate
* @param array $toolbox
* @return bool
*/
public static function onBaseTemplateToolbox( BaseTemplate $baseTemplate, array &$toolbox ) {
if ( isset( $baseTemplate->data['nav_urls']['citethispage'] ) ) {
$toolbox['citethispage'] = $baseTemplate->data['nav_urls']['citethispage'];
}
return true;
}
}