Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
RecentMessageGroup.php
Go to the documentation of this file.
1<?php
17 /*
18 * Yes this is very ugly hack and should not be removed.
19 * @see MessageCollection::getPages()
20 */
21 protected $namespace = false;
22 protected $language;
23
28 public function __construct() {
29 }
30
31 public function setLanguage( $code ) {
32 $this->language = $code;
33 }
34
35 public function getId() {
36 return '!recent';
37 }
38
39 public function getLabel( IContextSource $context = null ) {
40 $msg = wfMessage( 'translate-dynagroup-recent-label' );
41 $msg = self::addContext( $msg, $context );
42
43 return $msg->plain();
44 }
45
46 public function getDescription( IContextSource $context = null ) {
47 $msg = wfMessage( 'translate-dynagroup-recent-desc' );
48 $msg = self::addContext( $msg, $context );
49
50 return $msg->plain();
51 }
52
53 protected function getRCCutoff() {
54 $db = wfGetDB( DB_REPLICA );
55 $tables = 'recentchanges';
56 $max = $db->selectField( $tables, 'MAX(rc_id)', [], __METHOD__ );
57
58 return max( 0, $max - 50000 );
59 }
60
65 protected function getQueryConditions() {
66 global $wgTranslateMessageNamespaces;
67 $db = wfGetDB( DB_REPLICA );
68 $conds = [
69 'rc_title ' . $db->buildLike( $db->anyString(), '/' . $this->language ),
70 'rc_namespace' => $wgTranslateMessageNamespaces,
71 'rc_type != ' . RC_LOG,
72 'rc_id > ' . $this->getRCCutoff(),
73 ];
74
75 return $conds;
76 }
77
85 protected function matchingMessage( MessageHandle $handle ): bool {
86 return MessageGroups::isTranslatableMessage( $handle, $this->language );
87 }
88
89 public function getDefinitions() {
90 if ( !$this->language ) {
91 throw new MWException( 'Language not set' );
92 }
93
94 $db = wfGetDB( DB_REPLICA );
95
96 $rcQuery = RecentChange::getQueryInfo();
97 $tables = $rcQuery['tables'];
98 $joins = $rcQuery['joins'];
99
100 $fields = [ 'rc_namespace', 'rc_title' ];
101 $conds = $this->getQueryConditions();
102 $options = [
103 'ORDER BY' => 'rc_id DESC',
104 'LIMIT' => 5000
105 ];
106 $res = $db->select( $tables, $fields, $conds, __METHOD__, $options, $joins );
107
108 $defs = [];
109 foreach ( $res as $row ) {
110 $title = Title::makeTitle( $row->rc_namespace, $row->rc_title );
111 $handle = new MessageHandle( $title );
112
113 if ( !$this->matchingMessage( $handle ) ) {
114 continue;
115 }
116
117 $messageKey = $handle->getKey();
118 $fullKey = $row->rc_namespace . ':' . $messageKey;
119
120 /* Note: due to bugs, getMessage might return null even for
121 * known messages. These negatives are not cached, but that
122 * should be rare enough case to not affect performance. */
123 if ( !isset( $defs[$fullKey] ) ) {
124 $group = $handle->getGroup();
125 $msg = $group->getMessage( $messageKey, $group->getSourceLanguage() );
126
127 if ( $msg !== null ) {
128 $defs[$fullKey] = $msg;
129 }
130 }
131 }
132
133 return $defs;
134 }
135
136 public function getValidator() {
137 return null;
138 }
139
146 public function getMessageContent( MessageHandle $handle ) {
147 $groupId = MessageIndex::getPrimaryGroupId( $handle );
148 $group = MessageGroups::getGroup( $groupId );
149 if ( $group ) {
150 return $group->getMessage( $handle->getKey(), $group->getSourceLanguage() );
151 }
152
153 throw new MWException( 'Could not find group for ' . $handle->getKey() );
154 }
155}
return[ 'Translate:ConfigHelper'=> static function():ConfigHelper { return new ConfigHelper();}, 'Translate:CsvTranslationImporter'=> static function(MediaWikiServices $services):CsvTranslationImporter { return new CsvTranslationImporter( $services->getWikiPageFactory());}, 'Translate:EntitySearch'=> static function(MediaWikiServices $services):EntitySearch { return new EntitySearch($services->getMainWANObjectCache(), $services->getCollationFactory() ->makeCollation( 'uca-default-u-kn'), MessageGroups::singleton(), $services->getNamespaceInfo(), $services->get( 'Translate:MessageIndex'), $services->getTitleParser(), $services->getTitleFormatter());}, 'Translate:ExternalMessageSourceStateImporter'=> static function(MediaWikiServices $services):ExternalMessageSourceStateImporter { return new ExternalMessageSourceStateImporter($services->getMainConfig(), $services->get( 'Translate:GroupSynchronizationCache'), $services->getJobQueueGroup(), LoggerFactory::getInstance( 'Translate.GroupSynchronization'), MessageIndex::singleton());}, 'Translate:GroupSynchronizationCache'=> static function(MediaWikiServices $services):GroupSynchronizationCache { return new GroupSynchronizationCache( $services->get( 'Translate:PersistentCache'));}, 'Translate:MessageBundleStore'=> static function(MediaWikiServices $services):MessageBundleStore { return new MessageBundleStore(new RevTagStore(), $services->getJobQueueGroup(), $services->getLanguageNameUtils(), $services->get( 'Translate:MessageIndex'));}, 'Translate:MessageGroupReview'=> static function(MediaWikiServices $services):MessageGroupReview { return new MessageGroupReview($services->getDBLoadBalancer(), $services->getHookContainer());}, 'Translate:MessageIndex'=> static function(MediaWikiServices $services):MessageIndex { $params=$services->getMainConfig() ->get( 'TranslateMessageIndex');if(is_string( $params)) { $params=(array) $params;} $class=array_shift( $params);return new $class( $params);}, 'Translate:ParsingPlaceholderFactory'=> static function():ParsingPlaceholderFactory { return new ParsingPlaceholderFactory();}, 'Translate:PersistentCache'=> static function(MediaWikiServices $services):PersistentCache { return new PersistentDatabaseCache($services->getDBLoadBalancer(), $services->getJsonCodec());}, 'Translate:ProgressStatsTableFactory'=> static function(MediaWikiServices $services):ProgressStatsTableFactory { return new ProgressStatsTableFactory($services->getLinkRenderer(), $services->get( 'Translate:ConfigHelper'));}, 'Translate:SubpageListBuilder'=> static function(MediaWikiServices $services):SubpageListBuilder { return new SubpageListBuilder($services->get( 'Translate:TranslatableBundleFactory'), $services->getLinkBatchFactory());}, 'Translate:TranslatableBundleFactory'=> static function(MediaWikiServices $services):TranslatableBundleFactory { return new TranslatableBundleFactory($services->get( 'Translate:TranslatablePageStore'), $services->get( 'Translate:MessageBundleStore'));}, 'Translate:TranslatableBundleMover'=> static function(MediaWikiServices $services):TranslatableBundleMover { return new TranslatableBundleMover($services->getMovePageFactory(), $services->getJobQueueGroup(), $services->getLinkBatchFactory(), $services->get( 'Translate:TranslatableBundleFactory'), $services->get( 'Translate:SubpageListBuilder'), $services->getMainConfig() ->get( 'TranslatePageMoveLimit'));}, 'Translate:TranslatablePageParser'=> static function(MediaWikiServices $services):TranslatablePageParser { return new TranslatablePageParser($services->get( 'Translate:ParsingPlaceholderFactory'));}, 'Translate:TranslatablePageStore'=> static function(MediaWikiServices $services):TranslatablePageStore { return new TranslatablePageStore($services->get( 'Translate:MessageIndex'), $services->getJobQueueGroup(), new RevTagStore(), $services->getDBLoadBalancer());}, 'Translate:TranslationStashReader'=> static function(MediaWikiServices $services):TranslationStashReader { $db=$services->getDBLoadBalancer() ->getConnectionRef(DB_REPLICA);return new TranslationStashStorage( $db);}, 'Translate:TranslationStatsDataProvider'=> static function(MediaWikiServices $services):TranslationStatsDataProvider { return new TranslationStatsDataProvider(new ServiceOptions(TranslationStatsDataProvider::CONSTRUCTOR_OPTIONS, $services->getMainConfig()), $services->getObjectFactory());}, 'Translate:TranslationUnitStoreFactory'=> static function(MediaWikiServices $services):TranslationUnitStoreFactory { return new TranslationUnitStoreFactory( $services->getDBLoadBalancer());}, 'Translate:TranslatorActivity'=> static function(MediaWikiServices $services):TranslatorActivity { $query=new TranslatorActivityQuery($services->getMainConfig(), $services->getDBLoadBalancer());return new TranslatorActivity($services->getMainObjectStash(), $query, $services->getJobQueueGroup());}, 'Translate:TtmServerFactory'=> static function(MediaWikiServices $services):TtmServerFactory { $config=$services->getMainConfig();$default=$config->get( 'TranslateTranslationDefaultService');if( $default===false) { $default=null;} return new TtmServerFactory( $config->get( 'TranslateTranslationServices'), $default);}]
@phpcs-require-sorted-array
Factory class for accessing message groups individually by id or all of them as an list.
Class for pointing to messages, like Title class is for titles.
getKey()
Returns the identified or guessed message key.
getQueryConditions()
Allows subclasses to partially customize the query.
getDefinitions()
Fetch definitions from database.
getMessageContent(MessageHandle $handle)
Subpage language code, if any in the title, is ignored.
getDescription(IContextSource $context=null)
Returns a longer description about the group.
__construct()
These groups are always generated for one language.
matchingMessage(MessageHandle $handle)
Filters out messages that should not be displayed here as they are not displayed in other places.
getValidator()
Returns a message validator object or null.
getLabel(IContextSource $context=null)
Group for messages that can be controlled via a page in MediaWiki namespace.