Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/includes/OutputPageJsConfigBuilder.php
<?php

namespace Wikibase;

use Language;
use Message;
use OutputPage;
use Title;
use User;

/**
 * Handles adding user-specific or other js config to OutputPage
 *
 * @since 0.5
 *
 * @license GPL-2.0+
 * @author Katie Filbert < aude.wiki@gmail.com >
 */
class OutputPageJsConfigBuilder {

	/**
	 * @var CopyrightMessageBuilder
	 */
	private $copyrightMessageBuilder;

	public function __construct() {
		$this->copyrightMessageBuilder = new CopyrightMessageBuilder();
	}

	/**
	 * @param OutputPage $out
	 * @param string $rightsUrl
	 * @param string $rightsText
	 * @param string[] $badgeItems
	 *
	 * @return array
	 */
	public function build( OutputPage $out, $rightsUrl, $rightsText, array $badgeItems ) {
		$user = $out->getUser();
		$lang = $out->getLanguage();
		$title = $out->getTitle();

		$userConfigVars = $this->getUserConfigVars( $title, $user );

		$copyrightConfig = $this->getCopyrightConfig( $rightsUrl, $rightsText, $lang );

		$configVars = array_merge( $userConfigVars, $copyrightConfig );

		$configVars['wbBadgeItems'] = $badgeItems;

		return $configVars;
	}

	/**
	 * @param Title $title
	 * @param User $user
	 *
	 * @return array
	 */
	private function getUserConfigVars( Title $title, User $user ) {
		$configVars = array();

		/**
		 * This is used in wikibase.ui.entityViewInit.js to double check if a user can edit, and if
		 * so, initializes relevant javascript.
		 *
		 * @todo Remove these variables if the javascript no longer really needs them. This check
		 * involves database lookup, which is not nice.
		 */
		$configVars['wbUserIsBlocked'] = $user->isBlockedFrom( $title, true );

		// tell JS whether the user can edit
		$configVars['wbUserCanEdit'] = $title->userCan( 'edit', $user, false );

		return $configVars;
	}

	/**
	 * @param string $rightsUrl
	 * @param string $rightsText
	 * @param Language $language
	 *
	 * @return array
	 */
	private function getCopyrightConfig( $rightsUrl, $rightsText, Language $language ) {
		$copyrightMessage = $this->getCopyrightMessage( $rightsUrl, $rightsText, $language );

		return $this->getCopyrightVar( $copyrightMessage, $language );
	}

	/**
	 * @param Message $copyrightMessage
	 * @param Language $language
	 *
	 * @return array[]
	 */
	private function getCopyrightVar( $copyrightMessage, $language ) {
		// non-translated message
		$versionMessage = new Message( 'wikibase-shortcopyrightwarning-version' );

		return array(
			'wbCopyright' => array(
				'version' => $versionMessage->parse(),
				'messageHtml' => $copyrightMessage->inLanguage( $language )->parse()
			)
		);
	}

	/**
	 * @param string $rightsUrl
	 * @param string $rightsText
	 * @param Language $language
	 *
	 * @return Message
	 */
	private function getCopyrightMessage( $rightsUrl, $rightsText, Language $language ) {
		$copyrightMessage = $this->copyrightMessageBuilder->build(
			$rightsUrl,
			$rightsText,
			$language
		);

		return $copyrightMessage;
	}

}