MediaWiki
REL1_39
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
MWUnknownContentModelException
;
31
use
TitleFactory
;
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(
'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->castFromPageIdentity( $page );
94
$handler = $this->contentHandlerFactory->getContentHandler( $model );
95
96
// @phan-suppress-next-line PhanTypeMismatchArgumentNullable castFrom does not return null here
97
return
$handler->canBeUsedOn(
$title
);
98
}
99
105
public
function
getDefaultModel
( $page ) {
106
// NOTE: this method must not rely on $title->getContentModel() directly or indirectly,
107
// because it is used to initialize the mContentModel member.
108
109
$ext
=
''
;
110
$ns = $page->getNamespace();
111
$model = $this->namespaceContentModels[$ns] ??
null
;
112
113
// Hook can determine default model
114
if
( $page instanceof
PageIdentity
) {
115
$title
= $this->titleFactory->castFromPageIdentity( $page );
116
}
else
{
117
$title
= $this->titleFactory->castFromLinkTarget( $page );
118
}
119
// @phan-suppress-next-line PhanTypeMismatchArgumentNullable castFrom notnull/Type mismatch on pass-by-ref args
120
if
( !$this->hookRunner->onContentHandlerDefaultModelFor(
$title
, $model ) && $model !==
null
) {
121
return
$model;
122
}
123
124
// Could this page contain code based on the title?
125
$isCodePage = $ns ===
NS_MEDIAWIKI
&& preg_match(
'!\.(css|js|json)$!u'
,
$title
->getText(), $m );
126
if
( $isCodePage ) {
127
$ext
= $m[1];
128
}
129
130
// Is this a user subpage containing code?
131
$isCodeSubpage = $ns ===
NS_USER
132
&& !$isCodePage
133
&& preg_match(
"/\\/.*\\.(js|css|json)$/"
,
$title
->getText(), $m );
134
135
if
( $isCodeSubpage ) {
136
$ext
= $m[1];
137
}
138
139
// Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook?
140
$isWikitext = $model ===
null
|| $model ==
CONTENT_MODEL_WIKITEXT
;
141
$isWikitext = $isWikitext && !$isCodePage && !$isCodeSubpage;
142
143
if
( !$isWikitext ) {
144
switch
(
$ext
) {
145
case
'js'
:
146
return
CONTENT_MODEL_JAVASCRIPT
;
147
case
'css'
:
148
return
CONTENT_MODEL_CSS
;
149
case
'json'
:
150
return
CONTENT_MODEL_JSON
;
151
default
:
152
return
$model ??
CONTENT_MODEL_TEXT
;
153
}
154
}
155
156
// We established that it must be wikitext
157
158
return
CONTENT_MODEL_WIKITEXT
;
159
}
160
161
}
NS_USER
const NS_USER
Definition
Defines.php:66
CONTENT_MODEL_CSS
const CONTENT_MODEL_CSS
Definition
Defines.php:213
NS_MEDIAWIKI
const NS_MEDIAWIKI
Definition
Defines.php:72
CONTENT_MODEL_WIKITEXT
const CONTENT_MODEL_WIKITEXT
Definition
Defines.php:211
CONTENT_MODEL_JSON
const CONTENT_MODEL_JSON
Definition
Defines.php:215
CONTENT_MODEL_TEXT
const CONTENT_MODEL_TEXT
Definition
Defines.php:214
CONTENT_MODEL_JAVASCRIPT
const CONTENT_MODEL_JAVASCRIPT
Definition
Defines.php:212
MWUnknownContentModelException
Exception thrown when an unregistered content model is requested.
Definition
MWUnknownContentModelException.php:11
MediaWiki\HookContainer\HookContainer
HookContainer class.
Definition
HookContainer.php:45
MediaWiki\HookContainer\HookRunner
This class provides an implementation of the core hook interfaces, forwarding hook calls to HookConta...
Definition
HookRunner.php:565
MediaWiki\Revision\MainSlotRoleHandler
A SlotRoleHandler for the main slot.
Definition
MainSlotRoleHandler.php:44
MediaWiki\Revision\MainSlotRoleHandler\getDefaultModel
getDefaultModel( $page)
Definition
MainSlotRoleHandler.php:105
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\SlotRoleHandler
SlotRoleHandler instances are used to declare the existence and behavior of slot roles.
Definition
SlotRoleHandler.php:37
TitleFactory
Creates Title objects.
Definition
TitleFactory.php:35
MediaWiki\Content\IContentHandlerFactory
Definition
IContentHandlerFactory.php:10
MediaWiki\Linker\LinkTarget
Definition
LinkTarget.php:26
MediaWiki\Page\PageIdentity
Interface for objects (potentially) representing an editable wiki page.
Definition
PageIdentity.php:64
MediaWiki\Revision
Definition
ArchivedRevisionLookup.php:21
$ext
if(!is_readable( $file)) $ext
Definition
router.php:48
$title
$title
Definition
testCompression.php:38
includes
Revision
MainSlotRoleHandler.php
Generated on Mon Nov 25 2024 06:56:39 for MediaWiki by
1.10.0