MediaWiki  REL1_22
ContentHandler Class Reference

A content handler knows how do deal with a specific type of content on a wiki page. More...

Inheritance diagram for ContentHandler:

List of all members.

Public Member Functions

 __construct ($modelId, $formats)
 Constructor, initializing the ContentHandler instance with its model ID and a list of supported formats.
 canBeUsedOn (Title $title)
 Determines whether the content type handled by this ContentHandler can be used on the given page.
 createDifferenceEngine (IContextSource $context, $old=0, $new=0, $rcid=0,#FIXME:use everywhere!$refreshCache=false, $unhide=false)
 Factory for creating an appropriate DifferenceEngine for this content model.
 getActionOverrides ()
 Returns overrides for action handlers.
 getAutoDeleteReason (Title $title, &$hasHistory)
 Auto-generates a deletion reason.
 getAutosummary (Content $oldContent=null, Content $newContent=null, $flags)
 Return an applicable auto-summary if one exists for the given edit.
 getDefaultFormat ()
 The format used for serialization/deserialization by default by this ContentHandler.
 getModelID ()
 Returns the model id that identifies the content model this ContentHandler can handle.
 getPageLanguage (Title $title, Content $content=null)
 Get the language in which the content of the given page is written.
 getPageViewLanguage (Title $title, Content $content=null)
 Get the language in which the content of this page is written when viewed by user.
 getSupportedFormats ()
 Returns a list of serialization formats supported by the serializeContent() and unserializeContent() methods of this ContentHandler.
 getUndoContent (Revision $current, Revision $undo, Revision $undoafter)
 Get the Content object that needs to be saved in order to undo all revisions between $undo and $undoafter.
 isParserCacheSupported ()
 Returns true for content models that support caching using the ParserCache mechanism.
 isSupportedFormat ($format)
 Returns true if $format is a serialization format supported by this ContentHandler, and false otherwise.
 makeEmptyContent ()
 Creates an empty Content object of the type supported by this ContentHandler.
 makeParserOptions ($context)
 Get parser options suitable for rendering the primary article wikitext.
 makeRedirectContent (Title $destination, $text= '')
 Creates a new Content object that acts as a redirect to the given page, or null of redirects are not supported by this content model.
 merge3 (Content $oldContent, Content $myContent, Content $yourContent)
 Attempts to merge differences between three versions.
 serializeContent (Content $content, $format=null)
 Serializes a Content object of the type supported by this ContentHandler.
 supportsRedirects ()
 Returns true if this content model supports redirects.
 supportsSections ()
 Returns true if this content model supports sections.
 unserializeContent ($blob, $format=null)
 Unserializes a Content object of the type supported by this ContentHandler.

Static Public Member Functions

static deprecated ($func, $version, $component=false)
 Logs a deprecation warning, visible if $wgDevelopmentWarnings, but only if self::$enableDeprecationWarnings is set to true.
static getAllContentFormats ()
static getContentModels ()
static getContentText (Content $content=null)
 Convenience function for getting flat text from a Content object.
static getDefaultModelFor (Title $title)
 Returns the name of the default content model to be used for the page with the given title.
static getForContent (Content $content)
 Returns the appropriate ContentHandler singleton for the given Content object.
static getForModelID ($modelId)
 Returns the ContentHandler singleton for the given model ID.
static getForTitle (Title $title)
 Returns the appropriate ContentHandler singleton for the given title.
static getLocalizedName ($name)
 Returns the localized name for a given content model.
static makeContent ($text, Title $title=null, $modelId=null, $format=null)
 Convenience function for creating a Content object from a given textual representation.
static runLegacyHooks ($event, $args=array(), $warn=null)
 Call a legacy hook that uses text instead of Content objects.

Static Public Attributes

static $handlers

Protected Member Functions

 checkFormat ($format)
 Throws an MWException if isSupportedFormat( $format ) is not true.
 checkModelID ($model_id)
 Throws an MWException if $model_id is not the ID of the content model supported by this ContentHandler.
 getDiffEngineClass ()
 Returns the name of the diff engine to use.

Protected Attributes

 $mModelID
 $mSupportedFormats

Static Protected Attributes

static $enableDeprecationWarnings = false
 Switch for enabling deprecation warnings.

Detailed Description

A content handler knows how do deal with a specific type of content on a wiki page.

Content is stored in the database in a serialized form (using a serialization format a.k.a. MIME type) and is unserialized into its native PHP representation (the content model), which is wrapped in an instance of the appropriate subclass of Content.

ContentHandler instances are stateless singletons that serve, among other things, as a factory for Content objects. Generally, there is one subclass of ContentHandler and one subclass of Content for every type of content model.

Some content types have a flat model, that is, their native representation is the same as their serialized form. Examples would be JavaScript and CSS code. As of now, this also applies to wikitext (MediaWiki's default content type), but wikitext content may be represented by a DOM or AST structure in the future.

Definition at line 56 of file ContentHandler.php.


Constructor & Destructor Documentation

ContentHandler::__construct ( modelId,
formats 
)

Constructor, initializing the ContentHandler instance with its model ID and a list of supported formats.

Values for the parameters are typically provided as literals by subclass's constructors.

Parameters:
string$modelId(use CONTENT_MODEL_XXX constants).
array$formatsList for supported serialization formats (typically as MIME types)

Reimplemented in TextContentHandler.

Definition at line 398 of file ContentHandler.php.


Member Function Documentation

Determines whether the content type handled by this ContentHandler can be used on the given page.

This default implementation always returns true. Subclasses may override this to restrict the use of this content model to specific locations, typically based on the namespace or some other aspect of the title, such as a special suffix (e.g. ".svg" for SVG content).

Parameters:
Title$titlethe page's title.
Returns:
bool true if content of this kind can be used on the given page, false otherwise.

Definition at line 675 of file ContentHandler.php.

ContentHandler::checkFormat ( format) [protected]

Throws an MWException if isSupportedFormat( $format ) is not true.

Convenient for checking whether a format provided as a parameter is actually supported.

Parameters:
string$formatthe serialization format to check
Exceptions:
MWException

Definition at line 548 of file ContentHandler.php.

References getModelID(), and isSupportedFormat().

Referenced by TextContentHandler\serializeContent(), JavaScriptContentHandler\unserializeContent(), CssContentHandler\unserializeContent(), WikitextContentHandler\unserializeContent(), and TextContentHandler\unserializeContent().

ContentHandler::checkModelID ( model_id) [protected]

Throws an MWException if $model_id is not the ID of the content model supported by this ContentHandler.

Since:
1.21
Parameters:
string$model_idThe model to check
Exceptions:
MWException

Definition at line 482 of file ContentHandler.php.

Referenced by getAutoDeleteReason(), getUndoContent(), and TextContentHandler\merge3().

ContentHandler::createDifferenceEngine ( IContextSource context,
old = 0,
new = 0,
rcid = 0,
#FIXME:use everywhere!$  refreshCache = false,
unhide = false 
)

Factory for creating an appropriate DifferenceEngine for this content model.

Since:
1.21
Parameters:
$contextIContextSource context to use, anything else will be ignored
$oldInteger Old ID we want to show and diff with.
int | string$newString either 'prev' or 'next'.
$rcidInteger ??? FIXME (default 0)
$refreshCacheboolean If set, refreshes the diff cache
$unhideboolean If set, allow viewing deleted revs
Returns:
DifferenceEngine

Definition at line 586 of file ContentHandler.php.

References getDiffEngineClass().

static ContentHandler::deprecated ( func,
version,
component = false 
) [static]

Logs a deprecation warning, visible if $wgDevelopmentWarnings, but only if self::$enableDeprecationWarnings is set to true.

Parameters:
string$funcThe name of the deprecated function
string$versionThe version since the method is deprecated. Usually 1.21 for ContentHandler related stuff.
string | bool$component,:Component to which the function belongs. If false, it is assumed the function is in MediaWiki core.
See also:
ContentHandler::$enableDeprecationWarnings
wfDeprecated

Definition at line 1010 of file ContentHandler.php.

References wfDeprecated().

Referenced by Title\newFromRedirect(), Title\newFromRedirectArray(), and Title\newFromRedirectRecurse().

Returns overrides for action handlers.

Classes listed here will be used instead of the default one when (and only when) $wgActions[$action] === true. This allows subclasses to override the default action handlers.

Since:
1.21
Returns:
Array

Definition at line 567 of file ContentHandler.php.

References array().

ContentHandler::getAutoDeleteReason ( Title title,
&$  hasHistory 
)

Auto-generates a deletion reason.

Since:
1.21
Parameters:
$titleTitle: the page's title
&$hasHistoryBoolean: whether the page has a history
Returns:
mixed String containing deletion reason or empty string, or boolean false if no revision occurred

&$hasHistory is extremely ugly, it's here because WikiPage::getAutoDeleteReason() and Article::generateReason() have it / want it.

Definition at line 795 of file ContentHandler.php.

References $res, $rev, array(), as, checkModelID(), Revision\DELETED_USER, Title\getArticleID(), Revision\newFromTitle(), wfGetDB(), and wfMessage().

ContentHandler::getAutosummary ( Content oldContent = null,
Content newContent = null,
flags 
)

Return an applicable auto-summary if one exists for the given edit.

Since:
1.21
Parameters:
$oldContentContent|null: the previous text of the page.
$newContentContent|null: The submitted text of the page.
int$flagsBit mask: a bit mask of flags submitted for the edit.
Returns:
string An appropriate auto-summary, or an empty string.

Definition at line 720 of file ContentHandler.php.

References $flags, empty, text, and wfMessage().

static ContentHandler::getContentModels ( ) [static]

Definition at line 364 of file ContentHandler.php.

References global.

Referenced by ApiEditPage\getAllowedParams().

static ContentHandler::getContentText ( Content content = null) [static]

Convenience function for getting flat text from a Content object.

This should only be used in the context of backwards compatibility with code that is not yet able to handle Content objects!

If $content is null, this method returns the empty string.

If $content is an instance of TextContent, this method returns the flat text as returned by $content->getNativeData().

If $content is not a TextContent object, the behavior of this method depends on the global $wgContentHandlerTextFallback:

  • If $wgContentHandlerTextFallback is 'fail' and $content is not a TextContent object, an MWException is thrown.
  • If $wgContentHandlerTextFallback is 'serialize' and $content is not a TextContent object, $content->serialize() is called to get a string form of the content.
  • If $wgContentHandlerTextFallback is 'ignore' and $content is not a TextContent object, this method returns null.
  • otherwise, the behavior is undefined.
Since:
1.21
Parameters:
$contentContent|null
Returns:
null|string the textual form of $content, if available
Exceptions:
MWExceptionif $content is not an instance of TextContent and $wgContentHandlerTextFallback was set to 'fail'.

Definition at line 95 of file ContentHandler.php.

References global, and wfDebugLog().

Referenced by EditPageTest\assertEdit(), ContentHandlerTest\testGetContentText_NonTextContent_fail(), ContentHandlerTest\testGetContentText_NonTextContent_ignore(), ContentHandlerTest\testGetContentText_NonTextContent_serialize(), ContentHandlerTest\testGetContentText_Null(), and ContentHandlerTest\testGetContentText_TextContent().

The format used for serialization/deserialization by default by this ContentHandler.

This default implementation will return the first element of the array of formats that was passed to the constructor.

Since:
1.21
Returns:
string the name of the default serialization format as a MIME type

Definition at line 514 of file ContentHandler.php.

Referenced by TextContentHandler\merge3().

static ContentHandler::getDefaultModelFor ( Title title) [static]

Returns the name of the default content model to be used for the page with the given title.

Note: There should rarely be need to call this method directly. To determine the actual content model for a given page, use Title::getContentModel().

Which model is to be used by default for the page is determined based on several factors:

  • The global setting $wgNamespaceContentModels specifies a content model per namespace.
  • The hook ContentHandlerDefaultModelFor may be used to override the page's default model.
  • Pages in NS_MEDIAWIKI and NS_USER default to the CSS or JavaScript model if they end in .js or .css, respectively.
  • Pages in NS_MEDIAWIKI default to the wikitext model otherwise.
  • The hook TitleIsCssOrJsPage may be used to force a page to use the CSS or JavaScript model. This is a compatibility feature. The ContentHandlerDefaultModelFor hook should be used instead if possible.
  • The hook TitleIsWikitextPage may be used to force a page to use the wikitext model. This is a compatibility feature. The ContentHandlerDefaultModelFor hook should be used instead if possible.

If none of the above applies, the wikitext model is used.

Note: this is used by, and may thus not use, Title::getContentModel()

Since:
1.21
Parameters:
$titleTitle
Returns:
null|string default model name for the page given by $title

Definition at line 195 of file ContentHandler.php.

References $ext, array(), Title\getNamespace(), MWNamespace\getNamespaceContentModel(), Title\getText(), and wfRunHooks().

Referenced by Title\getContentModel(), ContentHandlerTest\testGetDefaultModelFor(), and WikiPageTest\testIsCountable().

Returns the name of the diff engine to use.

Since:
1.21
Returns:
string

Definition at line 686 of file ContentHandler.php.

Referenced by createDifferenceEngine().

static ContentHandler::getForContent ( Content content) [static]

Returns the appropriate ContentHandler singleton for the given Content object.

Since:
1.21
Parameters:
$contentContent
Returns:
ContentHandler

Definition at line 274 of file ContentHandler.php.

References getForModelID(), and Content\getModel().

static ContentHandler::getForModelID ( modelId) [static]

Returns the ContentHandler singleton for the given model ID.

Use the CONTENT_MODEL_XXX constants to identify the desired content model.

ContentHandler singletons are taken from the global $wgContentHandlers array. Keys in that array are model names, the values are either ContentHandler singleton objects, or strings specifying the appropriate subclass of ContentHandler.

If a class name is encountered when looking up the singleton for a given model name, the class is instantiated and the class name is replaced by the resulting singleton in $wgContentHandlers.

If no ContentHandler is defined for the desired $modelId, the ContentHandler may be provided by the ContentHandlerForModelID hook. If no ContentHandler can be determined, an MWException is raised.

Since:
1.21
Parameters:
string$modelIdThe ID of the content model for which to get a handler. Use CONTENT_MODEL_XXX constants.
Returns:
ContentHandler The ContentHandler singleton for handling the model given by $modelId
Exceptions:
MWExceptionif no handler is known for $modelId.

Definition at line 309 of file ContentHandler.php.

References $handlers, array(), empty, global, wfDebugLog(), and wfRunHooks().

Referenced by EditPage\__construct(), TextContent\convert(), ApiEditPage\execute(), ApiQueryRevisions\extractRowInfo(), getAllContentFormats(), getForContent(), getForTitle(), WikiPage\getTitle(), makeContent(), WikitextContentHandlerTest\setUp(), and EditPage\showConflict().

static ContentHandler::getLocalizedName ( name) [static]

Returns the localized name for a given content model.

Model names are localized using system messages. Message keys have the form content-model-$name, where $name is getContentModelName( $id ).

Parameters:
string$nameThe content model ID, as given by a CONTENT_MODEL_XXX constant or returned by Revision::getContentModel().
Returns:
string The content format's localized name.
Exceptions:
MWExceptionif the model id isn't known.

Definition at line 356 of file ContentHandler.php.

References $key, $name, and wfMessage().

Referenced by Title\isValidMoveOperation(), and ContentHandlerTest\testGetLocalizedName().

Returns the model id that identifies the content model this ContentHandler can handle.

Use with the CONTENT_MODEL_XXX constants.

Since:
1.21
Returns:
String The model ID

Definition at line 468 of file ContentHandler.php.

Referenced by checkFormat().

ContentHandler::getPageLanguage ( Title title,
Content content = null 
)

Get the language in which the content of the given page is written.

This default implementation just returns $wgContLang (except for pages in the MediaWiki namespace)

Note that the pages language is not cacheable, since it may in some cases depend on user settings.

Also note that the page language may or may not depend on the actual content of the page, that is, this method may load the content in order to determine the language.

Since:
1.21
Parameters:
Title$titlethe page to determine the language for.
Content | null$contentthe page's content, if you have it handy, to avoid reloading it.
Returns:
Language the page's language

Reimplemented in CssContentHandler, and JavaScriptContentHandler.

Definition at line 613 of file ContentHandler.php.

References $wgContLang, $wgLang, array(), Title\getNamespace(), Title\getText(), global, list, MessageCache\singleton(), wfGetLangObj(), and wfRunHooks().

Referenced by getPageViewLanguage().

ContentHandler::getPageViewLanguage ( Title title,
Content content = null 
)

Get the language in which the content of this page is written when viewed by user.

Defaults to $this->getPageLanguage(), but if the user specified a preferred variant, the variant will be used.

This default implementation just returns $this->getPageLanguage( $title, $content ) unless the user specified a preferred variant.

Note that the pages view language is not cacheable, since it depends on user settings.

Also note that the page language may or may not depend on the actual content of the page, that is, this method may load the content in order to determine the language.

Since:
1.21
Parameters:
Title$titlethe page to determine the language for.
Content | null$contentthe page's content, if you have it handy, to avoid reloading it.
Returns:
Language the page's language for viewing

Reimplemented in CssContentHandler, and JavaScriptContentHandler.

Definition at line 647 of file ContentHandler.php.

References Language\factory(), Title\getNamespace(), and getPageLanguage().

Returns a list of serialization formats supported by the serializeContent() and unserializeContent() methods of this ContentHandler.

Since:
1.21
Returns:
array of serialization formats as MIME type like strings

Definition at line 499 of file ContentHandler.php.

ContentHandler::getUndoContent ( Revision current,
Revision undo,
Revision undoafter 
)

Get the Content object that needs to be saved in order to undo all revisions between $undo and $undoafter.

Revisions must belong to the same page, must exist and must not be deleted.

Since:
1.21
Parameters:
$currentRevision The current text
$undoRevision The revision to undo
$undoafterRevision Must be an earlier revision than $undo
Returns:
mixed String on success, false on failure

Definition at line 900 of file ContentHandler.php.

References checkModelID(), empty, Revision\getContent(), and merge3().

Returns true for content models that support caching using the ParserCache mechanism.

See WikiPage::isParserCacheUsed().

Since:
1.21
Returns:
bool

Reimplemented in WikitextContentHandler.

Definition at line 967 of file ContentHandler.php.

Returns true if $format is a serialization format supported by this ContentHandler, and false otherwise.

Note that if $format is null, this method always returns true, because null means "use the default format".

Since:
1.21
Parameters:
string$formatthe serialization format to check
Returns:
bool

Definition at line 530 of file ContentHandler.php.

Referenced by checkFormat().

static ContentHandler::makeContent ( text,
Title title = null,
modelId = null,
format = null 
) [static]

Convenience function for creating a Content object from a given textual representation.

$text will be deserialized into a Content object of the model specified by $modelId (or, if that is not given, $title->getContentModel()) using the given format.

Since:
1.21
Parameters:
string$textthe textual representation, will be unserialized to create the Content object
$titlenull|Title the title of the page this text belongs to. Required if $modelId is not provided.
$modelIdnull|string the model to deserialize to. If not provided, $title->getContentModel() is used.
$formatnull|string the format to use for deserialization. If not given, the model's default format is used.
Exceptions:
MWException
Returns:
Content a Content object representing $text
Exceptions:
MWExceptionif $model or $format is not supported or if $text can not be unserialized using $format.

Definition at line 147 of file ContentHandler.php.

References $title, and getForModelID().

Referenced by PoolWorkArticleView\__construct(), EditPageTest\assertEdit(), WikiPageTest\createPage(), RevisionStorageTest\createPage(), ApiEditPage\execute(), ImportSiteScripts\execute(), EditCLI\execute(), ApiQueryRevisions\extractRowInfo(), SearchEngineTest\insertPage(), MessageCacheTest\makePage(), Title\newFromRedirect(), Title\newFromRedirectArray(), Title\newFromRedirectRecurse(), RevisionTest\newTestRevision(), RevisionTest\testConstructWithContent(), TextContentTest\testDeletionUpdates(), WikiPageTest\testDoEditContent(), WikiPageTest\testDoQuickEditContent(), ApiEditPageTest\testEditSection(), TextContentTest\testGetParserOutput(), WikitextContentTest\testGetSecondaryDataUpdates(), and ContentHandlerTest\testMakeContent().

Get parser options suitable for rendering the primary article wikitext.

Parameters:
IContextSource | User | string$contextOne of the following:
  • IContextSource: Use the User and the Language of the provided context
  • User: Use the provided User object and $wgLang for the language, so use an IContextSource object if possible.
  • 'canonical': Canonical options (anonymous user with default preferences and content language).
IContextSource | User | string$context
Exceptions:
MWException
Returns:
ParserOptions

Definition at line 940 of file ContentHandler.php.

References $options, $wgContLang, global, ParserOptions\newFromContext(), ParserOptions\newFromUser(), and ParserOptions\newFromUserAndLang().

ContentHandler::makeRedirectContent ( Title destination,
text = '' 
)

Creates a new Content object that acts as a redirect to the given page, or null of redirects are not supported by this content model.

This default implementation always returns null. Subclasses supporting redirects must override this method.

Note that subclasses that override this method to return a Content object should also override supportsRedirects() to return true.

Since:
1.21
Parameters:
Title$destinationthe page to redirect to.
string$texttext to include in the redirect, if possible.
Returns:
Content

Reimplemented in WikitextContentHandler.

Definition at line 456 of file ContentHandler.php.

ContentHandler::merge3 ( Content oldContent,
Content myContent,
Content yourContent 
)

Attempts to merge differences between three versions.

Returns a new Content object for a clean merge and false for failure or a conflict.

This default implementation always returns false.

Since:
1.21
Parameters:
$oldContentContent|string String
$myContentContent|string String
$yourContentContent|string String
Returns:
Content|Bool

Reimplemented in TextContentHandler.

Definition at line 705 of file ContentHandler.php.

Referenced by getUndoContent().

static ContentHandler::runLegacyHooks ( event,
args = array(),
warn = null 
) [static]

Call a legacy hook that uses text instead of Content objects.

Will log a warning when a matching hook function is registered. If the textual representation of the content is changed by the hook function, a new Content object is constructed from the new text.

Parameters:
string$eventevent name
array$argsparameters passed to hook functions
bool$warnwhether to log a warning. Default to self::$enableDeprecationWarnings. May be set to false for testing.
Returns:
Boolean True if no handler aborted the hook
See also:
ContentHandler::$enableDeprecationWarnings

Definition at line 1033 of file ContentHandler.php.

References $enableDeprecationWarnings, $handlers, $ok, array(), as, Hooks\getHandlers(), Hooks\isRegistered(), wfRestoreWarnings(), wfRunHooks(), wfSuppressWarnings(), and wfWarn().

Referenced by ContentHandlerTest\testRunLegacyHooks().

ContentHandler::serializeContent ( Content content,
format = null 
) [abstract]

Serializes a Content object of the type supported by this ContentHandler.

Since:
1.21
Parameters:
$contentContent The Content object to serialize
$formatnull|String The desired serialization format
Returns:
string Serialized form of the content

Reimplemented in DummyContentHandlerForTesting, and TextContentHandler.

Returns true if this content model supports redirects.

This default implementation returns false.

Content models that return true here should also implement ContentHandler::makeRedirectContent to return a Content object.

Returns:
boolean whether redirects are supported.

Reimplemented in WikitextContentHandler.

Definition at line 993 of file ContentHandler.php.

Returns true if this content model supports sections.

This default implementation returns false.

Content models that return true here should also implement Content::getSection, Content::replaceSection, etc. to handle sections..

Returns:
boolean whether sections are supported.

Reimplemented in WikitextContentHandler.

Definition at line 980 of file ContentHandler.php.

ContentHandler::unserializeContent ( blob,
format = null 
) [abstract]

Unserializes a Content object of the type supported by this ContentHandler.

Since:
1.21
Parameters:
string$blobserialized form of the content
$formatnull|String the format used for serialization
Returns:
Content the Content object created by deserializing $blob

Reimplemented in RevisionTestModifyableContentHandler, DummyContentHandlerForTesting, TextContentHandler, WikitextContentHandler, CssContentHandler, and JavaScriptContentHandler.


Member Data Documentation

ContentHandler::$enableDeprecationWarnings = false [static, protected]

Switch for enabling deprecation warnings.

Used by ContentHandler::deprecated() and ContentHandler::runLegacyHooks().

Once the ContentHandler code has settled in a bit, this should be set to true to make extensions etc. show warnings when using deprecated functions and hooks.

Definition at line 65 of file ContentHandler.php.

Referenced by runLegacyHooks().

ContentHandler::$handlers [static]

Definition at line 282 of file ContentHandler.php.

Referenced by getForModelID(), and runLegacyHooks().

ContentHandler::$mModelID [protected]

Definition at line 386 of file ContentHandler.php.

ContentHandler::$mSupportedFormats [protected]

Definition at line 387 of file ContentHandler.php.


The documentation for this class was generated from the following file: