%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/Translate/messagegroups/ |
Current File : /www/varak.net/wiki.varak.net/extensions/Translate/messagegroups/WikiPageMessageGroup.php |
<?php /** * This file contains an unmanaged message group implementation. * * @file * @author Niklas Laxström * @author Siebrand Mazeland * @license GPL-2.0-or-later */ /** * Wraps the translatable page sections into a message group. * @ingroup PageTranslation MessageGroup */ class WikiPageMessageGroup extends WikiMessageGroup implements IDBAccessObject { /** * @var Title|string */ protected $title; /** * @param string $id * @param Title|string $source */ public function __construct( $id, $source ) { $this->id = $id; $this->title = $source; $this->namespace = NS_TRANSLATIONS; } public function getSourceLanguage() { return $this->getTitle()->getPageLanguage()->getCode(); } /** * @return Title */ public function getTitle() { if ( is_string( $this->title ) ) { $this->title = Title::newFromText( $this->title ); } return $this->title; } /** * Only used for caching to avoid repeating database queries * for example during message index rebuild. */ protected $definitions; /** * @return array */ public function getDefinitions() { if ( is_array( $this->definitions ) ) { return $this->definitions; } $dbr = TranslateUtils::getSafeReadDB(); $tables = 'translate_sections'; $vars = [ 'trs_key', 'trs_text' ]; $conds = [ 'trs_page' => $this->getTitle()->getArticleID() ]; $options = [ 'ORDER BY' => 'trs_order' ]; $res = $dbr->select( $tables, $vars, $conds, __METHOD__, $options ); $defs = []; $prefix = $this->getTitle()->getPrefixedDBkey() . '/'; foreach ( $res as $r ) { $section = new TPSection(); $section->text = $r->trs_text; $defs[$r->trs_key] = $section->getTextWithVariables(); } $new_defs = []; foreach ( $defs as $k => $v ) { $k = str_replace( ' ', '_', $k ); $new_defs[$prefix . $k] = $v; } $this->definitions = $new_defs; return $this->definitions; } /** * Clear caches to avoid stale data. * * For example JobQueue can run for a longer time, and stale definitions would * cause the total number of messages to be incorrect. * * @since 2016.04 */ public function clearCaches() { $this->definitions = null; } public function load( $code ) { if ( $this->isSourceLanguage( $code ) ) { return $this->getDefinitions(); } return []; } /** * Returns of stored translation of message specified by the $key in language * code $code. * * @param string $key Message key * @param string $code Language code * @param int $flags READ_* class constant bitfield * @return string|null Stored translation or null. */ public function getMessage( $key, $code, $flags = self::READ_LATEST ) { if ( $this->isSourceLanguage( $code ) ) { $stuff = $this->load( $code ); $title = Title::newFromText( $key ); if ( $title ) { $key = $title->getPrefixedDBkey(); } return isset( $stuff[$key] ) ? $stuff[$key] : null; } $title = Title::makeTitleSafe( $this->getNamespace(), "$key/$code" ); if ( PageTranslationHooks::$renderingContext ) { $revFlags = Revision::READ_NORMAL; // bug T95753 } else { $revFlags = ( $flags & self::READ_LATEST ) == self::READ_LATEST ? Revision::READ_LATEST : Revision::READ_NORMAL; } $rev = Revision::newFromTitle( $title, false, $revFlags ); if ( !$rev ) { return null; } return ContentHandler::getContentText( $rev->getContent() ); } /** * @return MediaWikiMessageChecker */ public function getChecker() { $checker = new MediaWikiMessageChecker( $this ); $checker->setChecks( [ [ $checker, 'pluralCheck' ], [ $checker, 'braceBalanceCheck' ], [ $checker, 'miscMWChecks' ] ] ); return $checker; } public function getInsertablesSuggester() { return new TranslatablePageInsertablesSuggester(); } public function getDescription( IContextSource $context = null ) { $title = $this->getTitle()->getPrefixedText(); $target = ":$title"; $pageLanguageCode = $this->getSourceLanguage(); $inLanguageCode = $context ? $context->getLanguage()->getCode() : null; $languageName = Language::fetchLanguageName( $pageLanguageCode, $inLanguageCode ); // Allow for adding a custom group description by using // "MediaWiki:Tp-custom-<group ID>". $customText = ''; $msg = wfMessage( 'tp-custom-' . $this->id ); self::addContext( $msg, $context ); if ( $msg->exists() ) { $customText = $msg->plain(); } $msg = wfMessage( 'translate-tag-page-desc', $title, $target, $languageName, $pageLanguageCode ); self::addContext( $msg, $context ); return $msg->plain() . $customText; } }