includes/skins/components/SkinComponentCopyright.php
<?php
namespace MediaWiki\Skin;
use HtmlArmor;
use MediaWiki\Config\Config;
use MediaWiki\HookContainer\ProtectedHookAccessorTrait;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Message\Message;
use MediaWiki\SpecialPage\SpecialPage;
use MediaWiki\Title\Title;
use MediaWiki\User\User;
use MessageLocalizer;
class SkinComponentCopyright implements SkinComponent {
use ProtectedHookAccessorTrait;
/** @var Config */
private $config;
/** @var MessageLocalizer */
private $localizer;
/** @var SkinComponentRegistryContext */
private $skinContext;
/** @var User */
private $user;
/**
* @param SkinComponentRegistryContext $skinContext
*/
public function __construct( SkinComponentRegistryContext $skinContext ) {
$this->skinContext = $skinContext;
$this->config = $skinContext->getConfig();
$this->localizer = $skinContext->getMessageLocalizer();
$this->user = $skinContext->getUser();
}
/**
* @inheritDoc
*/
public function getTemplateData(): array {
return [
'html' => $this->getCopyrightHTML(),
];
}
/**
* Get the copyright.
*
* @return string
*/
public function getCopyrightHTML(): string {
$out = $this->skinContext->getOutput();
$title = $out->getTitle();
$isRevisionCurrent = $out->isRevisionCurrent();
$config = $this->config;
$localizer = $this->localizer;
$linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
if ( !$isRevisionCurrent
&& !$localizer->msg( 'history_copyright' )->inContentLanguage()->isDisabled()
) {
$type = 'history';
} else {
$type = 'normal';
}
if ( $config->get( MainConfigNames::RightsPage ) ) {
$title = Title::newFromText( $config->get( MainConfigNames::RightsPage ) );
$link = $linkRenderer->makeKnownLink( $title,
new HtmlArmor( $config->get( MainConfigNames::RightsText ) ?: $title->getText() )
);
} elseif ( $config->get( MainConfigNames::RightsUrl ) ) {
$link = $linkRenderer->makeExternalLink(
$config->get( MainConfigNames::RightsUrl ),
$config->get( MainConfigNames::RightsText ),
$title ?? SpecialPage::getTitleFor( 'Badtitle' )
);
} elseif ( $config->get( MainConfigNames::RightsText ) ) {
$link = $config->get( MainConfigNames::RightsText );
} else {
# Give up now
return '';
}
if ( $config->get( MainConfigNames::AllowRawHtmlCopyrightMessages ) ) {
// First check whether the old, raw HTML message exists (if not disallowed by wiki config),
// for compatibility with on-wiki message overrides.
$msgKey = $type === 'history' ? 'history_copyright' : 'copyright';
// Allow for site and per-namespace customization of copyright notice.
$this->getHookRunner()->onSkinCopyrightFooter( $title, $type, $msgKey, $link );
$msg = $localizer->msg( $msgKey )->rawParams( $link );
if ( !$msg->isDisabled() ) {
return $msg->text();
}
}
// If it does not exist or disabled, use the new, safer wikitext message.
$msgKey = $type === 'history' ? 'copyright-footer-history' : 'copyright-footer';
$msgSpec = Message::newFromSpecifier( $msgKey )->rawParams( $link );
// Allow for site and per-namespace customization of copyright notice.
$this->getHookRunner()->onSkinCopyrightFooterMessage( $title, $type, $msgSpec );
$msg = $localizer->msg( $msgSpec );
if ( !$msg->isDisabled() ) {
return $msg->parse();
}
return '';
}
}