X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/content/TextContentHandler.php diff --git a/includes/content/TextContentHandler.php b/includes/content/TextContentHandler.php new file mode 100644 index 00000000..ced2a665 --- /dev/null +++ b/includes/content/TextContentHandler.php @@ -0,0 +1,164 @@ +checkFormat( $format ); + + return $content->getNativeData(); + } + + /** + * Attempts to merge differences between three versions. Returns a new + * Content object for a clean merge and false for failure or a conflict. + * + * All three Content objects passed as parameters must have the same + * content model. + * + * This text-based implementation uses wfMerge(). + * + * @param Content $oldContent The page's previous content. + * @param Content $myContent One of the page's conflicting contents. + * @param Content $yourContent One of the page's conflicting contents. + * + * @return Content|bool + */ + public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) { + $this->checkModelID( $oldContent->getModel() ); + $this->checkModelID( $myContent->getModel() ); + $this->checkModelID( $yourContent->getModel() ); + + $format = $this->getDefaultFormat(); + + $old = $this->serializeContent( $oldContent, $format ); + $mine = $this->serializeContent( $myContent, $format ); + $yours = $this->serializeContent( $yourContent, $format ); + + $ok = wfMerge( $old, $mine, $yours, $result ); + + if ( !$ok ) { + return false; + } + + if ( !$result ) { + return $this->makeEmptyContent(); + } + + $mergedContent = $this->unserializeContent( $result, $format ); + + return $mergedContent; + } + + /** + * Returns the name of the associated Content class, to + * be used when creating new objects. Override expected + * by subclasses. + * + * @since 1.24 + * + * @return string + */ + protected function getContentClass() { + return TextContent::class; + } + + /** + * Unserializes a Content object of the type supported by this ContentHandler. + * + * @since 1.21 + * + * @param string $text Serialized form of the content + * @param string $format The format used for serialization + * + * @return Content The TextContent object wrapping $text + */ + public function unserializeContent( $text, $format = null ) { + $this->checkFormat( $format ); + + $class = $this->getContentClass(); + return new $class( $text ); + } + + /** + * Creates an empty TextContent object. + * + * @since 1.21 + * + * @return Content A new TextContent object with empty text. + */ + public function makeEmptyContent() { + $class = $this->getContentClass(); + return new $class( '' ); + } + + /** + * @see ContentHandler::supportsDirectEditing + * + * @return bool Default is true for TextContent and derivatives. + */ + public function supportsDirectEditing() { + return true; + } + + public function getFieldsForSearchIndex( SearchEngine $engine ) { + $fields = parent::getFieldsForSearchIndex( $engine ); + $fields['language'] = + $engine->makeSearchFieldMapping( 'language', SearchIndexField::INDEX_TYPE_KEYWORD ); + + return $fields; + } + + public function getDataForSearchIndex( + WikiPage $page, + ParserOutput $output, + SearchEngine $engine + ) { + $fields = parent::getDataForSearchIndex( $page, $output, $engine ); + $fields['language'] = + $this->getPageLanguage( $page->getTitle(), $page->getContent() )->getCode(); + return $fields; + } + +}