MediaWiki  master
TextContent.php
Go to the documentation of this file.
1 <?php
29 
38 
42  protected $mText;
43 
49  public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
50  parent::__construct( $model_id );
51 
52  if ( $text === null || $text === false ) {
53  wfWarn( "TextContent constructed with \$text = " . var_export( $text, true ) . "! "
54  . "This may indicate an error in the caller's scope.", 2 );
55 
56  $text = '';
57  }
58 
59  if ( !is_string( $text ) ) {
60  throw new MWException( "TextContent expects a string in the constructor." );
61  }
62 
63  $this->mText = $text;
64  }
65 
71  public function copy() {
72  return $this; # NOTE: this is ok since TextContent are immutable.
73  }
74 
75  public function getTextForSummary( $maxlength = 250 ) {
76  $text = $this->getText();
77 
78  $truncatedtext = MediaWikiServices::getInstance()->getContentLanguage()->
79  truncateForDatabase( preg_replace( "/[\n\r]/", ' ', $text ), max( 0, $maxlength ) );
80 
81  return $truncatedtext;
82  }
83 
89  public function getSize() {
90  $text = $this->getText();
91 
92  return strlen( $text );
93  }
94 
104  public function isCountable( $hasLinks = null ) {
105  global $wgArticleCountMethod;
106 
107  if ( $this->isRedirect() ) {
108  return false;
109  }
110 
111  if ( $wgArticleCountMethod === 'any' ) {
112  return true;
113  }
114 
115  return false;
116  }
117 
125  public function getNativeData() {
126  return $this->getText();
127  }
128 
136  public function getText() {
137  return $this->mText;
138  }
139 
145  public function getTextForSearchIndex() {
146  return $this->getText();
147  }
148 
157  public function getWikitextForTransclusion() {
159  $wikitext = $this->convert( CONTENT_MODEL_WIKITEXT, 'lossy' );
160  '@phan-var WikitextContent $wikitext';
161 
162  if ( $wikitext ) {
163  return $wikitext->getText();
164  } else {
165  return false;
166  }
167  }
168 
182  public static function normalizeLineEndings( $text ) {
183  return str_replace( [ "\r\n", "\r" ], "\n", rtrim( $text ) );
184  }
185 
198  public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
199  $text = $this->getText();
200  $pst = self::normalizeLineEndings( $text );
201 
202  return ( $text === $pst ) ? $this : new static( $pst, $this->getModel() );
203  }
204 
217  public function diff( Content $that, Language $lang = null ) {
218  $this->checkModelID( $that->getModel() );
220  '@phan-var self $that';
221  // @todo could implement this in DifferenceEngine and just delegate here?
222 
223  if ( !$lang ) {
224  $lang = MediaWikiServices::getInstance()->getContentLanguage();
225  }
226 
227  $otext = $this->getText();
228  $ntext = $that->getText();
229 
230  # Note: Use native PHP diff, external engines don't give us abstract output
231  $ota = explode( "\n", $lang->segmentForDiff( $otext ) );
232  $nta = explode( "\n", $lang->segmentForDiff( $ntext ) );
233 
234  $diff = new Diff( $ota, $nta );
235 
236  return $diff;
237  }
238 
256  protected function fillParserOutput( Title $title, $revId,
257  ParserOptions $options, $generateHtml, ParserOutput &$output
258  ) {
259  global $wgTextModelsToParse;
260 
261  if ( in_array( $this->getModel(), $wgTextModelsToParse ) ) {
262  // parse just to get links etc into the database, HTML is replaced below.
263  $output = MediaWikiServices::getInstance()->getParser()
264  ->parse( $this->getText(), $title, $options, true, true, $revId );
265  }
266 
267  if ( $generateHtml ) {
268  $html = $this->getHtml();
269  } else {
270  $html = '';
271  }
272 
273  $output->clearWrapperDivClass();
274  $output->setText( $html );
275  }
276 
290  protected function getHtml() {
291  return $this->getHighlightHtml();
292  }
293 
310  protected function getHighlightHtml() {
311  return htmlspecialchars( $this->getText() );
312  }
313 
327  public function convert( $toModel, $lossy = '' ) {
328  $converted = parent::convert( $toModel, $lossy );
329 
330  if ( $converted !== false ) {
331  return $converted;
332  }
333 
334  $toHandler = ContentHandler::getForModelID( $toModel );
335 
336  if ( $toHandler instanceof TextContentHandler ) {
337  // NOTE: ignore content serialization format - it's just text anyway.
338  $text = $this->getText();
339  $converted = $toHandler->unserializeContent( $text );
340  }
341 
342  return $converted;
343  }
344 
345 }
getNativeData()
Returns the text represented by this Content object, as a string.
$wgArticleCountMethod
Method used to determine if a page in a content namespace should be counted as a valid article...
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
const CONTENT_MODEL_WIKITEXT
Definition: Defines.php:215
__construct( $text, $model_id=CONTENT_MODEL_TEXT)
Definition: TextContent.php:49
setText( $text)
$model_id
Name of the content model this Content object represents.
getWikitextForTransclusion()
Returns attempts to convert this content object to wikitext, and then returns the text string...
string $mText
Definition: TextContent.php:42
if(!isset( $args[0])) $lang
const CONTENT_MODEL_TEXT
Definition: Defines.php:218
getHtml()
Generates an HTML version of the content, for display.
getText()
Returns the text represented by this Content object, as a string.
getTextForSummary( $maxlength=250)
Returns a textual representation of the content suitable for use in edit summaries and log messages...
Definition: TextContent.php:75
The User object encapsulates all of the user-specific settings (user_id, name, rights, email address, options, last login time).
Definition: User.php:51
static getForModelID( $modelId)
Returns the ContentHandler singleton for the given model ID.
getHighlightHtml()
Generates an HTML version of the content, for display.
Base implementation for content objects.
Class representing a &#39;diff&#39; between two sequences of strings.
Definition: Diff.php:32
$wgTextModelsToParse
Determines which types of text are parsed as wikitext.
getSize()
Returns the text&#39;s size in bytes.
Definition: TextContent.php:89
preSaveTransform(Title $title, User $user, ParserOptions $popts)
Returns a Content object with pre-save transformations applied.
checkModelID( $modelId)
isCountable( $hasLinks=null)
Returns true if this content is not a redirect, and $wgArticleCountMethod is "any".
Base content handler implementation for flat text contents.
clearWrapperDivClass()
Clears the CSS class to use for the wrapping div, effectively disabling the wrapper div until addWrap...
getModel()
Returns the ID of the content model used by this Content object.
static normalizeLineEndings( $text)
Do a "\\r\\n" -> "\\n" and "\\r" -> "\\n" transformation as well as trim trailing whitespace...
fillParserOutput(Title $title, $revId, ParserOptions $options, $generateHtml, ParserOutput &$output)
Fills the provided ParserOutput object with information derived from the content. ...
diff(Content $that, Language $lang=null)
Diff this content object with another content object.
convert( $toModel, $lossy='')
This implementation provides lossless conversion between content models based on TextContent.
getTextForSearchIndex()
Returns the text represented by this Content object, as a string.