123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- /**
- * Base content handler class for flat text contents.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @since 1.21
- *
- * @file
- * @ingroup Content
- */
- /**
- * Base content handler implementation for flat text contents.
- *
- * @ingroup Content
- */
- class TextContentHandler extends ContentHandler {
- public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = [ CONTENT_FORMAT_TEXT ] ) {
- parent::__construct( $modelId, $formats );
- }
- /**
- * Returns the content's text as-is.
- *
- * @param Content $content
- * @param string|null $format The serialization format to check
- *
- * @return mixed
- */
- public function serializeContent( Content $content, $format = null ) {
- $this->checkFormat( $format );
- // @phan-suppress-next-line PhanUndeclaredMethod
- return $content->getText();
- }
- /**
- * 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|null $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;
- }
- }
|