221 '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#s';
232 public function __construct( $text =
'', $languageLinks = [], $categoryLinks = [],
233 $unused =
false, $titletext =
''
235 $this->mText = $text;
236 $this->mLanguageLinks = $languageLinks;
237 $this->mCategories = $categoryLinks;
238 $this->mTitleText = $titletext;
232 public function __construct( $text =
'', $languageLinks = [], $categoryLinks = [], {
…}
254 $text = $this->mText;
255 if ( $this->mEditSectionTokens ) {
256 $text = preg_replace_callback(
257 self::EDITSECTION_REGEX,
260 $editsectionPage = Title::newFromText( htmlspecialchars_decode( $m[1] ) );
261 $editsectionSection = htmlspecialchars_decode( $m[2] );
262 $editsectionContent = isset( $m[4] ) ? Sanitizer::decodeCharReferences( $m[3] ) :
null;
264 if ( !is_object( $editsectionPage ) ) {
265 throw new MWException(
"Bad parser output text." );
268 $skin =
$wgOut->getSkin();
269 return call_user_func_array(
270 [ $skin,
'doEditSectionLink' ],
271 [ $editsectionPage, $editsectionSection,
272 $editsectionContent,
$wgLang->getCode() ]
278 $text = preg_replace( self::EDITSECTION_REGEX,
'', $text );
282 if ( isset( $this->mTOCEnabled ) && $this->mTOCEnabled ) {
283 $text = str_replace( [ Parser::TOC_START, Parser::TOC_END ],
'', $text );
285 $text = preg_replace(
286 '#' . preg_quote( Parser::TOC_START,
'#' ) .
'.*?' . preg_quote( Parser::TOC_END,
'#' ) .
'#s',
299 $this->mSpeculativeRevId = $id;
307 return $this->mSpeculativeRevId;
311 return $this->mLanguageLinks;
315 return $this->mInterwikiLinks;
319 return array_keys( $this->mCategories );
323 return $this->mCategories;
331 return $this->mIndicators;
335 return $this->mTitleText;
339 return $this->mSections;
343 return $this->mEditSectionTokens;
347 return $this->mLinks;
351 return $this->mTemplates;
355 return $this->mTemplateIds;
359 return $this->mImages;
363 return $this->mFileSearchOptions;
367 return $this->mExternalLinks;
371 return $this->mNoGallery;
375 return $this->mHeadItems;
379 return $this->mModules;
383 return $this->mModuleScripts;
387 return $this->mModuleStyles;
395 return $this->mJsConfigVars;
399 return (array)$this->mOutputHooks;
403 return array_keys( $this->mWarnings );
407 return $this->mIndexPolicy;
411 return $this->mTOCHTML;
418 return $this->mTimestamp;
422 return $this->mLimitReportData;
426 return $this->mLimitReportJSData;
430 return $this->mTOCEnabled;
434 return $this->mEnableOOUI;
438 return wfSetVar( $this->mText, $text );
442 return wfSetVar( $this->mLanguageLinks, $ll );
446 return wfSetVar( $this->mCategories, $cl );
454 return wfSetVar( $this->mSections, $toc );
458 return wfSetVar( $this->mEditSectionTokens,
$t );
462 return wfSetVar( $this->mIndexPolicy, $policy );
466 return wfSetVar( $this->mTOCHTML, $tochtml );
470 return wfSetVar( $this->mTimestamp, $timestamp );
474 return wfSetVar( $this->mTOCEnabled, $flag );
478 $this->mCategories[$c] =
$sort;
487 $this->mIndicators[$id] = $content;
498 $this->mEnableOOUI = $enable;
502 $this->mLanguageLinks[] =
$t;
506 $this->mWarnings[
$s] = 1;
510 $this->mOutputHooks[] = [ $hook, $data ];
514 $this->mNewSection = (bool)
$value;
517 $this->mHideNewSection = (bool)
$value;
520 return (
bool)$this->mHideNewSection;
523 return (
bool)$this->mNewSection;
534 return (
bool)preg_match(
'/^' .
536 ( substr( $internal, 0, 2 ) ===
'//' ?
'(?:https?:)?' :
'' ) .
537 preg_quote( $internal,
'/' ) .
538 #
check for query/path/anchor or end of link in each
case
545 # We don't register links pointing to our own server, unless... :-)
548 # Replace unnecessary URL escape codes with the referenced character
549 # This prevents spammers from hiding links from the filters
550 $url = parser::normalizeLinkUrl( $url );
552 $registerExternalLink =
true;
554 $registerExternalLink = !self::isLinkInternal(
$wgServer, $url );
556 if ( $registerExternalLink ) {
557 $this->mExternalLinks[$url] = 1;
568 if ( $title->isExternal() ) {
573 $ns = $title->getNamespace();
574 $dbk = $title->getDBkey();
582 } elseif ( $dbk ===
'' ) {
586 if ( !isset( $this->mLinks[$ns] ) ) {
587 $this->mLinks[$ns] = [];
589 if ( is_null( $id ) ) {
590 $id = $title->getArticleID();
592 $this->mLinks[$ns][$dbk] = $id;
602 public function addImage( $name, $timestamp =
null, $sha1 =
null ) {
603 $this->mImages[
$name] = 1;
604 if ( $timestamp !==
null && $sha1 !==
null ) {
605 $this->mFileSearchOptions[
$name] = [
'time' => $timestamp,
'sha1' => $sha1 ];
602 public function addImage( $name, $timestamp =
null, $sha1 =
null ) {
…}
617 $ns = $title->getNamespace();
618 $dbk = $title->getDBkey();
619 if ( !isset( $this->mTemplates[$ns] ) ) {
620 $this->mTemplates[$ns] = [];
622 $this->mTemplates[$ns][$dbk] = $page_id;
623 if ( !isset( $this->mTemplateIds[$ns] ) ) {
624 $this->mTemplateIds[$ns] = [];
626 $this->mTemplateIds[$ns][$dbk] = $rev_id;
634 if ( !$title->isExternal() ) {
635 throw new MWException(
'Non-interwiki link passed, internal parser error.' );
637 $prefix = $title->getInterwiki();
638 if ( !isset( $this->mInterwikiLinks[$prefix] ) ) {
639 $this->mInterwikiLinks[$prefix] = [];
641 $this->mInterwikiLinks[$prefix][$title->getDBkey()] = 1;
652 if ( $tag !==
false ) {
660 $this->mModules = array_merge( $this->mModules, (array)
$modules );
664 $this->mModuleScripts = array_merge( $this->mModuleScripts, (array)
$modules );
668 $this->mModuleStyles = array_merge( $this->mModuleStyles, (array)
$modules );
679 if ( is_array(
$keys ) ) {
681 $this->mJsConfigVars[$key] =
$value;
700 $this->mHeadItems = array_merge( $this->mHeadItems,
$out->getHeadItemsArray() );
701 $this->mPreventClickjacking = $this->mPreventClickjacking ||
$out->getPreventClickjacking();
721 if ( $title->isSpecialPage() ) {
722 wfDebug( __METHOD__ .
": Not adding tracking category $msg to special page!\n" );
729 ->inContentLanguage()
732 # Allow tracking categories to be disabled by setting them to "-"
733 if ( $cat ===
'-' ) {
737 $containerCategory = Title::makeTitleSafe(
NS_CATEGORY, $cat );
738 if ( $containerCategory ) {
739 $this->
addCategory( $containerCategory->getDBkey(), $this->getProperty(
'defaultsort' ) ?:
'' );
742 wfDebug( __METHOD__ .
": [[MediaWiki:$msg]] is not a valid title!\n" );
784 $this->mFlags[$flag] =
true;
788 return isset( $this->mFlags[$flag] );
865 return isset( $this->mProperties[$name] ) ? $this->mProperties[
$name] :
false;
869 unset( $this->mProperties[$name] );
873 if ( !isset( $this->mProperties ) ) {
874 $this->mProperties = [];
876 return $this->mProperties;
885 if ( !isset( $this->mAccessedOptions ) ) {
888 return array_keys( $this->mAccessedOptions );
904 $this->mAccessedOptions[$option] =
true;
949 unset( $this->mExtensionData[$key] );
951 $this->mExtensionData[$key] =
$value;
967 if ( isset( $this->mExtensionData[$key] ) ) {
968 return $this->mExtensionData[$key];
974 private static function getTimes( $clock =
null ) {
976 if ( !$clock || $clock ===
'wall' ) {
977 $ret[
'wall'] = microtime(
true );
979 if ( !$clock || $clock ===
'cpu' ) {
982 $ret[
'cpu'] = $ru[
'ru_utime.tv_sec'] + $ru[
'ru_utime.tv_usec'] / 1e6;
983 $ret[
'cpu'] += $ru[
'ru_stime.tv_sec'] + $ru[
'ru_stime.tv_usec'] / 1e6;
994 $this->mParseStartTime = self::getTimes();
1009 if ( !isset( $this->mParseStartTime[$clock] ) ) {
1013 $end = self::getTimes( $clock );
1014 return $end[$clock] - $this->mParseStartTime[$clock];
1037 $this->mLimitReportData[$key] =
$value;
1039 if ( is_array(
$value ) ) {
1040 if ( array_keys(
$value ) === [ 0, 1 ]
1041 && is_numeric(
$value[0] )
1042 && is_numeric(
$value[1] )
1044 $data = [
'value' =>
$value[0],
'limit' =>
$value[1] ];
1052 if ( strpos( $key,
'-' ) ) {
1053 list( $ns, $name ) = explode(
'-', $key, 2 );
1054 $this->mLimitReportJSData[$ns][
$name] = $data;
1056 $this->mLimitReportJSData[$key] = $data;
1084 return wfSetVar( $this->mPreventClickjacking, $flag );
1094 $this->mMaxAdaptiveExpiry = min( $ttl, $this->mMaxAdaptiveExpiry );
1104 if ( is_infinite( $this->mMaxAdaptiveExpiry ) ) {
1109 if ( is_float( $runtime ) ) {
1110 $slope = ( self::SLOW_AR_TTL - self::FAST_AR_TTL )
1111 / ( self::PARSE_SLOW_SEC - self::PARSE_FAST_SEC );
1113 $point = self::SLOW_AR_TTL - self::PARSE_SLOW_SEC * $slope;
1116 max( $slope * $runtime + $point, self::MIN_AR_TTL ),
1117 $this->mMaxAdaptiveExpiry
1125 array_keys( get_object_vars( $this ) ),
1126 [
'mParseStartTime' ]
Apache License January http
$wgRegisterInternalExternals
By default MediaWiki does not register links pointing to same server in externallinks dataset,...
$wgParserCacheExpireTime
The expiry time for the parser cache, in seconds.
$wgServer
URL of the server.
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
wfSetVar(&$dest, $source, $force=false)
Sets dest to source and returns the original value of dest If source is NULL, it just returns the val...
wfGetRusage()
Get system resource usage of current request context.
Parser cache specific expiry check.
updateCacheExpiry( $seconds)
Sets the number of seconds after which this object should expire.
getCacheExpiry()
Returns the number of seconds after which this object should expire.
This class should be covered by a general architecture document which does not exist as of January 20...
addOutputPageMetadata(OutputPage $out)
Copy items from the OutputPage object into this one.
static getTimes( $clock=null)
getSpeculativeRevIdUsed()
int null $mSpeculativeRevId
Assumed rev ID for {{REVISIONID}} if no revision is set.
addOutputHook( $hook, $data=false)
setDisplayTitle( $text)
Override the title to be used for display.
addJsConfigVars( $keys, $value=null)
Add one or more variables to be set in mw.config in JavaScript.
setIndicator( $id, $content)
addModuleScripts( $modules)
addInterwikiLink( $title)
setEditSectionTokens( $t)
setEnableOOUI( $enable=false)
Enables OOUI, if true, in any OutputPage instance this ParserOutput object is added to.
getDisplayTitle()
Get the title to be used for display.
addTrackingCategory( $msg, $title)
Add a tracking category, getting the title from a system message, or print a debug message if the tit...
finalizeAdaptiveCacheExpiry()
Call this when parsing is done to lower the TTL based on low parse times.
addTemplate( $title, $page_id, $rev_id)
Register a template dependency for this output.
addLink(Title $title, $id=null)
Record a local or interwiki inline link for saving in future link tables.
resetParseStartTime()
Resets the parse start timestamps for future calls to getTimeSinceStart()
preventClickjacking( $flag=null)
Get or set the prevent-clickjacking flag.
setProperty( $name, $value)
Set a property to be stored in the page_props database table.
recordOption( $option)
Tags a parser option for use in the cache key for this parser output.
addHeadItem( $section, $tag=false)
Add some text to the "<head>".
hasDynamicContent()
Check whether the cache TTL was lowered due to dynamic content.
getExtensionData( $key)
Gets extensions data previously attached to this ParserOutput using setExtensionData().
getTimeSinceStart( $clock)
Returns the time since resetParseStartTime() was last called.
getRawText()
Get the cacheable text with <mw:editsection> markers still in it.
addImage( $name, $timestamp=null, $sha1=null)
Register a file dependency for this output.
updateRuntimeAdaptiveExpiry( $ttl)
Lower the runtime adaptive TTL to at most this value.
getUsedOptions()
Returns the options from its ParserOptions which have been taken into account to produce this output ...
setLimitReportData( $key, $value)
Sets parser limit report data for a key.
setExtensionData( $key, $value)
Attaches arbitrary data to this ParserObject.
setTimestamp( $timestamp)
setSpeculativeRevIdUsed( $id)
__construct( $text='', $languageLinks=[], $categoryLinks=[], $unused=false, $titletext='')
static isLinkInternal( $internal, $url)
Checks, if a url is pointing to the own server.
array $mLimitReportJSData
Parser limit report data for JSON.
addModuleStyles( $modules)
setFlag( $flag)
Fairly generic flag setter thingy.
int $mMaxAdaptiveExpiry
Upper bound of expiry based on parse duration.
Represents a title within MediaWiki.
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as $wgLang
either a unescaped string or a HtmlArmor object after in associative array form externallinks including delete and has completed for all link tables whether this was an auto creation default is conds Array Extra conditions for the No matching items in log is displayed if loglist is empty msgKey Array If you want a nice box with a set this to the key of the message First element is the message additional optional elements are parameters for the key that are processed with wfMessage() -> params() ->parseAsBlock() - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset - wrap String Wrap the message in html(usually something like "<div ...>$1</div>"). - flags Integer display flags(NO_ACTION_LINK, NO_EXTRA_USER_LINKS) 'LogException':Called before an exception(or PHP error) is logged. This is meant for integration with external error aggregation services
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output $out
Allows to change the fields on the form that will be generated $name
in this case you re responsible for computing and outputting the entire conflict i the difference between revisions and your text headers and sections and Diff or overridable Default is either copyrightwarning or copyrightwarning2 overridable Default is editpage tos summary such as anonymity and the real check
usually copyright or history_copyright This message must be in HTML not wikitext if the section is included from a template $section
This document describes the XML format used to represent information about external sites known to a MediaWiki installation This information about external sites is used to allow inter wiki links
in the order they appear.