MediaWiki
master
MainSlotRoleHandler.php
Go to the documentation of this file.
1
<?php
23
namespace
MediaWiki\Revision
;
24
25
use
MediaWiki\Content\IContentHandlerFactory
;
26
use
MediaWiki\HookContainer\HookContainer
;
27
use
MediaWiki\HookContainer\HookRunner
;
28
use
MediaWiki\Linker\LinkTarget
;
29
use
MediaWiki\Page\PageIdentity
;
30
use
MediaWiki\Title\TitleFactory
;
31
use
MWUnknownContentModelException
;
32
44
class
MainSlotRoleHandler
extends
SlotRoleHandler
{
45
50
private
$namespaceContentModels;
51
53
private
$contentHandlerFactory;
54
56
private
$hookRunner;
57
59
private
$titleFactory;
60
68
public
function
__construct
(
69
array $namespaceContentModels,
70
IContentHandlerFactory
$contentHandlerFactory,
71
HookContainer
$hookContainer,
72
TitleFactory
$titleFactory
73
) {
74
parent::__construct(
SlotRecord::MAIN
,
CONTENT_MODEL_WIKITEXT
);
75
$this->namespaceContentModels = $namespaceContentModels;
76
$this->contentHandlerFactory = $contentHandlerFactory;
77
$this->hookRunner =
new
HookRunner
( $hookContainer );
78
$this->titleFactory = $titleFactory;
79
}
80
81
public
function
supportsArticleCount
() {
82
return
true
;
83
}
84
92
public
function
isAllowedModel
( $model,
PageIdentity
$page ) {
93
$title = $this->titleFactory->newFromPageIdentity( $page );
94
$handler = $this->contentHandlerFactory->getContentHandler( $model );
95
96
return
$handler->canBeUsedOn( $title );
97
}
98
104
public
function
getDefaultModel
( $page ) {
105
// NOTE: this method must not rely on $title->getContentModel() directly or indirectly,
106
// because it is used to initialize the mContentModel member.
107
108
$ext =
''
;
109
$ns = $page->getNamespace();
110
$model = $this->namespaceContentModels[$ns] ??
null
;
111
112
// Hook can determine default model
113
if
( $page instanceof
PageIdentity
) {
114
$title = $this->titleFactory->newFromPageIdentity( $page );
115
}
else
{
116
$title = $this->titleFactory->newFromLinkTarget( $page );
117
}
118
// @phan-suppress-next-line PhanTypeMismatchArgument Type mismatch on pass-by-ref args
119
if
( !$this->hookRunner->onContentHandlerDefaultModelFor( $title, $model ) && $model !==
null
) {
120
return
$model;
121
}
122
123
// Could this page contain code based on the title?
124
$isCodePage = $ns ===
NS_MEDIAWIKI
&& preg_match(
'!\.(css|js|json)$!u'
, $title->getText(), $m );
125
if
( $isCodePage ) {
126
$ext = $m[1];
127
}
128
129
// Is this a user subpage containing code?
130
$isCodeSubpage = $ns ===
NS_USER
131
&& !$isCodePage
132
&& preg_match(
"/\\/.*\\.(js|css|json)$/"
, $title->getText(), $m );
133
134
if
( $isCodeSubpage ) {
135
$ext = $m[1];
136
}
137
138
// Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook?
139
$isWikitext = $model ===
null
|| $model ==
CONTENT_MODEL_WIKITEXT
;
140
$isWikitext = $isWikitext && !$isCodePage && !$isCodeSubpage;
141
142
if
( !$isWikitext ) {
143
switch
( $ext ) {
144
case
'js'
:
145
return
CONTENT_MODEL_JAVASCRIPT
;
146
case
'css'
:
147
return
CONTENT_MODEL_CSS
;
148
case
'json'
:
149
return
CONTENT_MODEL_JSON
;
150
default
:
151
return
$model ??
CONTENT_MODEL_TEXT
;
152
}
153
}
154
155
// We established that it must be wikitext
156
157
return
CONTENT_MODEL_WIKITEXT
;
158
}
159
160
}
NS_USER
const NS_USER
Definition
Defines.php:67
CONTENT_MODEL_CSS
const CONTENT_MODEL_CSS
Definition
Defines.php:230
NS_MEDIAWIKI
const NS_MEDIAWIKI
Definition
Defines.php:73
CONTENT_MODEL_WIKITEXT
const CONTENT_MODEL_WIKITEXT
Definition
Defines.php:228
CONTENT_MODEL_JSON
const CONTENT_MODEL_JSON
Definition
Defines.php:232
CONTENT_MODEL_TEXT
const CONTENT_MODEL_TEXT
Definition
Defines.php:231
CONTENT_MODEL_JAVASCRIPT
const CONTENT_MODEL_JAVASCRIPT
Definition
Defines.php:229
MWUnknownContentModelException
Exception thrown when an unregistered content model is requested.
Definition
MWUnknownContentModelException.php:11
MediaWiki\HookContainer\HookContainer
HookContainer class.
Definition
HookContainer.php:57
MediaWiki\HookContainer\HookRunner
This class provides an implementation of the core hook interfaces, forwarding hook calls to HookConta...
Definition
HookRunner.php:586
MediaWiki\Revision\MainSlotRoleHandler
A SlotRoleHandler for the main slot.
Definition
MainSlotRoleHandler.php:44
MediaWiki\Revision\MainSlotRoleHandler\getDefaultModel
getDefaultModel( $page)
Definition
MainSlotRoleHandler.php:104
MediaWiki\Revision\MainSlotRoleHandler\supportsArticleCount
supportsArticleCount()
Whether this slot should be considered when determining whether a page should be counted as an "artic...
Definition
MainSlotRoleHandler.php:81
MediaWiki\Revision\MainSlotRoleHandler\__construct
__construct(array $namespaceContentModels, IContentHandlerFactory $contentHandlerFactory, HookContainer $hookContainer, TitleFactory $titleFactory)
Definition
MainSlotRoleHandler.php:68
MediaWiki\Revision\MainSlotRoleHandler\isAllowedModel
isAllowedModel( $model, PageIdentity $page)
Definition
MainSlotRoleHandler.php:92
MediaWiki\Revision\SlotRecord\MAIN
const MAIN
Definition
SlotRecord.php:43
MediaWiki\Revision\SlotRoleHandler
SlotRoleHandler instances are used to declare the existence and behavior of slot roles.
Definition
SlotRoleHandler.php:37
MediaWiki\Title\TitleFactory
Creates Title objects.
Definition
TitleFactory.php:39
MediaWiki\Content\IContentHandlerFactory
Definition
IContentHandlerFactory.php:7
MediaWiki\Linker\LinkTarget
Represents the target of a wiki link.
Definition
LinkTarget.php:33
MediaWiki\Page\PageIdentity
Interface for objects (potentially) representing an editable wiki page.
Definition
PageIdentity.php:67
MediaWiki\Revision
Definition
ArchivedRevisionLookup.php:21
includes
Revision
MainSlotRoleHandler.php
Generated on Fri Dec 6 2024 10:25:44 for MediaWiki by
1.10.0