<?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;
	}

}
