27class Hooks implements EditFilterMergedContentHook, PageSaveCompleteHook {
28 public const CONSTRUCTOR_OPTIONS = [
29 'TranslateEnableMessageBundleIntegration',
33 private static $instance;
37 private $loadBalancer;
39 private $messageBundleStore;
41 private $WANObjectCache;
43 private $enableIntegration;
45 public function __construct(
46 LoggerInterface $logger,
47 ILoadBalancer $loadBalancer,
48 WANObjectCache $WANObjectCache,
50 bool $enableIntegration
52 $this->logger = $logger;
53 $this->loadBalancer = $loadBalancer;
54 $this->WANObjectCache = $WANObjectCache;
55 $this->messageBundleStore = $messageBundleStore;
56 $this->enableIntegration = $enableIntegration;
59 public static function getInstance():
self {
60 $services = MediaWikiServices::getInstance();
61 self::$instance = self::$instance ??
63 LoggerFactory::getInstance(
'Translate.MessageBundle' ),
64 $services->getDBLoadBalancer(),
65 $services->getMainWANObjectCache(),
66 $services->get(
'Translate:MessageBundleStore' ),
67 $services->getMainConfig()->get(
'TranslateEnableMessageBundleIntegration' )
69 return self::$instance;
74 IContextSource $context,
85 $this->messageBundleStore->validate( $context->getTitle(), $content );
89 $status->fatal(
'translate-messagebundle-validation-error', $context->msg( $e ) );
103 if ( !$this->enableIntegration ) {
107 $method = __METHOD__;
108 $content = $revisionRecord->getContent( SlotRecord::MAIN );
109 $pageTitle = $wikiPage->getTitle();
111 if ( $content ===
null ) {
112 $this->logger->debug(
"Unable to access content of page {pageName} in $method", [
113 'pageName' => $pageTitle->getPrefixedText()
118 if ( !$content instanceof MessageBundleContent ) {
123 $this->messageBundleStore->save( $pageTitle, $revisionRecord, $content );
124 }
catch ( MalformedBundle $e ) {
126 $this->logger->warning(
"Page {pageName} is not a valid message bundle in $method", [
127 'pageName' => $pageTitle->getPrefixedText(),
136 self::getInstance()->onTranslateInitGroupLoadersImpl( $groupLoader );
141 if ( $model === MessageBundleContent::CONTENT_MODEL_ID ) {
146 public function onTranslateInitGroupLoadersImpl( array &$groupLoader ): void {
147 if ( !$this->enableIntegration ) {
151 $groupLoader[] =
new MessageBundleMessageGroupLoader(
152 Utilities::getSafeReadDB(),