Mwalker has uploaded a new change for review.
https://gerrit.wikimedia.org/r/84676
Change subject: Cache Banner Message Field Definitions
......................................................................
Cache Banner Message Field Definitions
This makes it possible to not have to wikitext parse the banner
content every time we load a banner. This is most useful for
translation when we have to run through each banner to figure
out what needs translating.
Bug: 53769
Bug: 53792
Change-Id: I82c8b0ede730dd5e06d796609a63475367e5a571
---
M CentralNotice.php
M includes/Banner.php
M includes/BannerMessageGroup.php
M special/SpecialCentralNoticeBanners.php
4 files changed, 33 insertions(+), 13 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CentralNotice
refs/changes/76/84676/1
diff --git a/CentralNotice.php b/CentralNotice.php
index 408885c..cd4662d 100644
--- a/CentralNotice.php
+++ b/CentralNotice.php
@@ -121,9 +121,6 @@
// Whether to use the Translation extension for banner message translation
$wgNoticeUseTranslateExtension = false;
-// True makes translatable banner messages available immediately after save.
-$wgNoticeRunMessageIndexRebuildJobImmediately = true;
-
// Whether to disable variant languages and use an automatically converted
version of banners
// fetched from their parent language (zh for zh-cn, for example) instead.
$wgNoticeUseLanguageConversion = false;
diff --git a/includes/Banner.php b/includes/Banner.php
index 111bb22..3b25baa 100644
--- a/includes/Banner.php
+++ b/includes/Banner.php
@@ -839,7 +839,7 @@
$pageId = $revision->getPage();
// If the banner includes translatable
messages, tag it for translation
- $fields = $this->extractMessageFields(
$this->bodyContent );
+ $fields =
$this->getMessageFieldsFromCache( $this->bodyContent );
if ( count( $fields ) > 0 ) {
// Tag the banner for
translation
Banner::addTag(
'banner:translate', $revisionId, $pageId, $this->getId() );
@@ -854,6 +854,33 @@
//<editor-fold desc="Banner message fields">
function getMessageField( $field_name ) {
return new BannerMessage( $this->getName(), $field_name );
+ }
+
+ /**
+ * Returns all the message fields in a banner
+ * @see Banner::extractMessageFields()
+ *
+ * @param bool|string $bodyContent If a string will regenerate cache
object from the string
+ *
+ * @return array|mixed
+ */
+ function getMessageFieldsFromCache( $bodyContent = false ) {
+ global $wgMemc;
+
+ $key = wfMemcKey( 'centralnotice', 'bannerfields',
$this->getName() );
+ $data = false;
+ if ( $bodyContent === false ) {
+ $data = $wgMemc->get( $key );
+ }
+
+ if ( $data !== false ) {
+ $data = json_decode( $data, true );
+ } else {
+ $data = $this->extractMessageFields( $bodyContent );
+ $wgMemc->set( $key, json_encode( $data ) );
+ }
+
+ return $data;
}
/**
@@ -951,7 +978,7 @@
* @throws Exception
*/
public function save( $user = null ) {
- global $wgUser, $wgNoticeRunMessageIndexRebuildJobImmediately;
+ global $wgUser;
$db = CNDatabase::getDb();
@@ -984,11 +1011,7 @@
// exist in the render job.
// TODO: This will go away if we start tracking
messages in database :)
MessageGroups::clearCache();
- if (
$wgNoticeRunMessageIndexRebuildJobImmediately ) {
- MessageIndexRebuildJob::newJob()->run();
- } else {
- return
JobQueueGroup::singleton()->push( MessageIndexRebuildJob::newJob() );
- }
+ MessageIndexRebuildJob::newJob()->run();
$this->runTranslateJob = false;
}
diff --git a/includes/BannerMessageGroup.php b/includes/BannerMessageGroup.php
index 50e941d..f4dd166 100644
--- a/includes/BannerMessageGroup.php
+++ b/includes/BannerMessageGroup.php
@@ -40,7 +40,7 @@
$keys = array();
$banner = Banner::fromName( $this->bannerName );
- $fields = $banner->extractMessageFields();
+ $fields = $banner->getMessageFieldsFromCache();
// The MediaWiki page name convention for messages is the same
as the
// convention for banners themselves, except that it doesn't
include
@@ -66,7 +66,7 @@
$definitions = array();
$banner = Banner::fromName( $this->bannerName );
- $fields = $banner->extractMessageFields();
+ $fields = $banner->getMessageFieldsFromCache();
// The MediaWiki page name convention for messages is the same
as the
// convention for banners themselves, except that it doesn't
include
diff --git a/special/SpecialCentralNoticeBanners.php
b/special/SpecialCentralNoticeBanners.php
index ff7e065..a958495 100644
--- a/special/SpecialCentralNoticeBanners.php
+++ b/special/SpecialCentralNoticeBanners.php
@@ -428,7 +428,7 @@
}
/* --- Translatable Messages Section --- */
- $messages = $banner->extractMessageFields(
$banner->getBodyContent() );
+ $messages = $banner->getMessageFieldsFromCache(
$banner->getBodyContent() );
if ( $messages ) {
// Only show this part of the form if messages exist
--
To view, visit https://gerrit.wikimedia.org/r/84676
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I82c8b0ede730dd5e06d796609a63475367e5a571
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CentralNotice
Gerrit-Branch: master
Gerrit-Owner: Mwalker <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits