diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/MediaWiki/MediaWikiNsContentReader.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/src/MediaWiki/MediaWikiNsContentReader.php | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/MediaWiki/MediaWikiNsContentReader.php b/www/wiki/extensions/SemanticMediaWiki/src/MediaWiki/MediaWikiNsContentReader.php new file mode 100644 index 00000000..3b2c74cb --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/src/MediaWiki/MediaWikiNsContentReader.php @@ -0,0 +1,78 @@ +<?php + +namespace SMW\MediaWiki; + +use Revision; +use Title; + +/** + * @license GNU GPL v2+ + * @since 2.2 + * + * @author mwjames + */ +class MediaWikiNsContentReader { + + /** + * @var boolean + */ + private $skipMessageCache = false; + + /** + * @since 2.3 + */ + public function skipMessageCache() { + $this->skipMessageCache = true; + } + + /** + * @since 2.2 + * + * @param string $name + * + * @return string + */ + public function read( $name ) { + + $content = ''; + + if ( !$this->skipMessageCache && wfMessage( $name )->exists() ) { + $content = wfMessage( $name )->inContentLanguage()->text(); + } + + if ( $content === '' ) { + $content = $this->readFromDatabase( $name ); + } + + return $content; + } + + private function readFromDatabase( $name ) { + + $title = Title::makeTitleSafe( NS_MEDIAWIKI, ucfirst( $name ) ); + + if ( $title === null ) { + return ''; + } + + // Revision::READ_LATEST is not specified in MW 1.19 + $revisionReadFlag = defined( 'Revision::READ_LATEST' ) ? Revision::READ_LATEST : 0; + + $revision = Revision::newFromTitle( $title, false, $revisionReadFlag ); + + if ( $revision === null ) { + return ''; + } + + if ( class_exists( 'WikitextContent' ) ) { + return $revision->getContent()->getNativeData(); + } + + if ( method_exists( $revision, 'getContent') ) { + return $revision->getContent( Revision::RAW ); + } + + return $revision->getRawText(); + } + +} |