wikimedia/mediawiki-extensions-VisualEditor

View on GitHub
includes/VisualEditorDesktopArticleTargetInitModule.php

Summary

Maintainability
A
25 mins
Test Coverage
<?php
/**
 * ResourceLoader module for the 'ext.visualEditor.desktopArticleTarget.init'
 * module. Necessary to incorporate the VisualEditorTabMessages
 * configuration setting.
 *
 * @file
 * @ingroup Extensions
 * @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
 * @license MIT
 */

namespace MediaWiki\Extension\VisualEditor;

use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\FileModule;

class VisualEditorDesktopArticleTargetInitModule extends FileModule {

    /**
     * @inheritDoc
     */
    public function getMessages() {
        $messages = parent::getMessages();
        $services = MediaWikiServices::getInstance();

        $veConfig = $services->getConfigFactory()->makeConfig( 'visualeditor' );
        $messages = array_merge(
            $messages,
            array_filter( $veConfig->get( 'VisualEditorTabMessages' ) )
        );

        // Some skins don't use the default 'edit' and 'create' message keys.
        // Check the localisation cache for which skins have a custom message for this.
        // We only need this for the current skin, but ResourceLoader's message cache
        // does not fragment by skin.
        foreach ( [ 'edit', 'create', 'edit-local', 'create-local' ] as $msgKey ) {
            // MediaWiki defaults
            $messages[] = "skin-view-$msgKey";
            foreach ( $services->getSkinFactory()->getInstalledSkins() as $skname => $unused ) {
                // Per-skin overrides
                // Messages: vector-view-edit, vector-view-create
                // Disable database lookups for site-level message overrides as they
                // are expensive and not needed here (T221294). We only care whether the
                // message key is known to localisation cache at all.
                $msg = wfMessage( "$skname-view-$msgKey" )->useDatabase( false )->inContentLanguage();
                if ( $msg->exists() ) {
                    $messages[] = "$skname-view-$msgKey";
                }
            }
        }

        return $messages;
    }

}