57 parent::__construct(
'ChangeContentModel',
'editcontentmodel' );
59 $this->contentHandlerFactory = $contentHandlerFactory;
60 $this->contentModelChangeFactory = $contentModelChangeFactory;
61 $this->spamChecker = $spamChecker;
62 $this->revisionLookup = $revisionLookup;
63 $this->wikiPageFactory = $wikiPageFactory;
64 $this->searchEngineFactory = $searchEngineFactory;
65 $this->collationFactory = $collationFactory;
86 $title = Title::newFromText(
$par );
88 $this->title = $title;
98 $contentModelLogPage =
new LogPage(
'contentmodel' );
99 $text =
Xml::element(
'h2',
null, $contentModelLogPage->getName()->text() );
101 LogEventsList::showLogExtract( $out,
'contentmodel', $this->title );
114 if ( $this->title ) {
123 if ( $this->title ) {
124 $this->
getOutput()->addBacklinkSubtitle( $this->title );
131 $titleObj = Title::newFromTextThrow( $title );
133 $this->oldRevision = $this->revisionLookup->getRevisionByTitle( $titleObj ) ?:
false;
135 if ( $this->oldRevision ) {
136 $oldContent = $this->oldRevision->getContent( SlotRecord::MAIN );
137 if ( !$oldContent->getContentHandler()->supportsDirectEditing() ) {
138 return $this->
msg(
'changecontentmodel-nodirectediting' )
139 ->params( ContentHandler::getLocalizedName( $oldContent->getModel() ) )
152 'name' =>
'pagetitle',
154 'label-message' =>
'changecontentmodel-title-label',
155 'validation-callback' => [ $this,
'validateTitle' ],
158 if ( $this->title ) {
159 $options = $this->getOptionsForTitle( $this->title );
162 'changecontentmodel-emptymodels-title',
163 'changecontentmodel-emptymodels-text',
164 [ $this->title->getPrefixedText() ]
167 $fields[
'pagetitle'][
'readonly'] =
true;
172 'default' => $this->title->getContentModel(),
173 'options' => $options,
174 'label-message' =>
'changecontentmodel-model-label'
178 'maxlength' => CommentStore::COMMENT_CHARACTER_LIMIT,
180 'validation-callback' =>
function ( $reason ) {
181 if ( $reason ===
null || $reason ===
'' ) {
186 $match = $this->spamChecker->checkSummary( $reason );
189 return $this->
msg(
'spamprotectionmatch', $match )->parse();
194 'label-message' =>
'changecontentmodel-reason-label',
207 private function getOptionsForTitle( ?
Title $title =
null ) {
208 $models = $this->contentHandlerFactory->getContentModels();
210 foreach ( $models as $model ) {
211 $handler = $this->contentHandlerFactory->getContentHandler( $model );
212 if ( !$handler->supportsDirectEditing() ) {
216 if ( !$handler->canBeUsedOn( $title ) ) {
220 $options[ContentHandler::getLocalizedName( $model )] = $model;
225 $collation = $this->collationFactory->getCategoryCollation();
226 uksort( $options,
static function ( $a, $b ) use ( $collation ) {
227 $a = $collation->getSortKey( $a );
228 $b = $collation->getSortKey( $b );
229 return strcmp( $a, $b );
236 $this->title = Title::newFromText( $data[
'pagetitle'] );
237 $page = $this->wikiPageFactory->newFromTitle( $this->title );
239 $changer = $this->contentModelChangeFactory->newContentModelChange(
245 $permissionStatus = $changer->authorizeChange();
246 if ( !$permissionStatus->isGood() ) {
248 $wikitext = $out->formatPermissionStatus( $permissionStatus );
250 return Status::newFatal(
new RawMessage(
'$1', [ $wikitext ] ) );
253 $status = $changer->doContentModelChange(
264 $out->setPageTitleMsg( $this->
msg(
'changecontentmodel-success-title' ) );
265 $out->addWikiMsg(
'changecontentmodel-success-text', $this->title );
277 return $this->
prefixSearchString( $search, $limit, $offset, $this->searchEngineFactory );
286class_alias( SpecialChangeContentModel::class,
'SpecialChangeContentModel' );
An error page which can definitely be safely rendered using the OutputPage.
Class to simplify the use of log pages.
A content handler knows how do deal with a specific type of content on a wiki page.
Service to check if text (either content or a summary) qualifies as spam.
Service for creating WikiPage objects.
Special page which uses an HTMLForm to handle processing.
string null $par
The subpage of the special page.
getContext()
Gets the context this SpecialPage is executed in.
getRequest()
Get the WebRequest being used for this instance.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
getOutput()
Get the OutputPage being used for this instance.
prefixSearchString( $search, $limit, $offset, ?SearchEngineFactory $searchEngineFactory=null)
Perform a regular substring search for prefixSearchSubpages.
getAuthority()
Shortcut to get the Authority executing this instance.
addHelpLink( $to, $overrideBaseUrl=false)
Adds help link with an icon via page indicators.
__construct(IContentHandlerFactory $contentHandlerFactory, ContentModelChangeFactory $contentModelChangeFactory, SpamChecker $spamChecker, RevisionLookup $revisionLookup, WikiPageFactory $wikiPageFactory, SearchEngineFactory $searchEngineFactory, CollationFactory $collationFactory)
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
postHtml()
Add post-HTML to the form.
setParameter( $par)
Maybe do something interesting with the subpage parameter.
getDisplayFormat()
Get display format for the form.
alterForm(HTMLForm $form)
Play with the HTMLForm if you need to more substantially.
onSubmit(array $data)
Process the form on submission.
getFormFields()
Get an HTMLForm descriptor array.
prefixSearchSubpages( $search, $limit, $offset)
Return an array of subpages beginning with $search that this special page will accept.
doesWrites()
Indicates whether POST requests to this special page require write access to the wiki.
onSuccess()
Do something exciting on successful processing of the form, most likely to show a confirmation messag...
Factory class for SearchEngine.
Service for changing the content model of wiki pages.