wiki.techinc.nl/includes/Revision/SlotRoleHandler.php
Daimona Eaytoy e5444ea55a docs: Avoid some scalar juggling
Phan can treat scalar types as non-interchangeable with
`scalar_implicit_cast` set to false. This patch fixes some of those
issues (which are in total >1000), namely the ones with alphabetic order
< includes/actions.

Change-Id: Ib1c6573ab899088bc319b9da9ceaffc850da3dbe
2019-09-19 17:21:24 +00:00

159 lines
5.2 KiB
PHP

<?php
/**
* This file is part of MediaWiki.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
namespace MediaWiki\Revision;
use MediaWiki\Linker\LinkTarget;
/**
* SlotRoleHandler instances are used to declare the existence and behavior of slot roles.
* Most importantly, they control which content model can be used for the slot, and how it is
* represented in the rendered verswion of page content.
*
* @since 1.33
*/
class SlotRoleHandler {
/**
* @var string
*/
private $role;
/**
* @var array
* @see getOutputLayoutHints
*/
private $layout = [
'display' => 'section', // use 'none' to suppress
'region' => 'center',
'placement' => 'append'
];
/**
* @var string
*/
private $contentModel;
/**
* @param string $role The name of the slot role defined by this SlotRoleHandler. See
* SlotRoleRegistry::defineRole for more information.
* @param string $contentModel The default content model for this slot. As per the default
* implementation of isAllowedModel(), also the only content model allowed for the
* slot. Subclasses may however handle default and allowed models differently.
* @param array $layout Layout hints, for use by RevisionRenderer. See getOutputLayoutHints.
*/
public function __construct( $role, $contentModel, $layout = [] ) {
$this->role = $role;
$this->contentModel = $contentModel;
$this->layout = array_merge( $this->layout, $layout );
}
/**
* @return string The role this SlotRoleHandler applies to
*/
public function getRole() {
return $this->role;
}
/**
* Layout hints for use while laying out the combined output of all slots, typically by
* RevisionRenderer. The layout hints are given as an associative array. Well-known keys
* to use:
*
* * "display": how the output of this slot should be represented. Supported values:
* - "section": show as a top level section of the region.
* - "none": do not show at all
* Further values that may be supported in the future include "box" and "banner".
* * "region": in which region of the page the output should be placed. Supported values:
* - "center": the central content area.
* Further values that may be supported in the future include "top" and "bottom", "left"
* and "right", "header" and "footer".
* * "placement": placement relative to other content of the same area.
* - "append": place at the end, after any output processed previously.
* Further values that may be supported in the future include "prepend". A "weight" key
* may be introduced for more fine grained control.
*
* @return array an associative array of hints
*/
public function getOutputLayoutHints() {
return $this->layout;
}
/**
* The message key for the translation of the slot name.
*
* @return string
*/
public function getNameMessageKey() {
return 'slot-name-' . $this->role;
}
/**
* Determines the content model to use per default for this slot on the given page.
*
* The default implementation always returns the content model provided to the constructor.
* Subclasses may base the choice on default model on the page title or namespace.
* The choice should not depend on external state, such as the page content.
*
* @param LinkTarget $page
*
* @return string
*/
public function getDefaultModel( LinkTarget $page ) {
return $this->contentModel;
}
/**
* Determines whether the given model can be used on this slot on the given page.
*
* The default implementation checks whether $model is the content model provided to the
* constructor. Subclasses may allow other models and may base the decision on the page title
* or namespace. The choice should not depend on external state, such as the page content.
*
* @note This should be checked when creating new revisions. Existing revisions
* are not guaranteed to comply with the return value.
*
* @param string $model
* @param LinkTarget $page
*
* @return bool
*/
public function isAllowedModel( $model, LinkTarget $page ) {
return ( $model === $this->contentModel );
}
/**
* Whether this slot should be considered when determining whether a page should be counted
* as an "article" in the site statistics.
*
* For a page to be considered countable, one of the page's slots must return true from this
* method, and Content::isCountable() must return true for the content of that slot.
*
* The default implementation always returns false.
*
* @return bool
*/
public function supportsArticleCount() {
return false;
}
}