Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
TranslatableBundleFactory.php
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\Translate\MessageGroupProcessing;
5
6use InvalidArgumentException;
10use MediaWiki\Page\PageIdentity;
11
20
21 public function __construct(
22 private readonly TranslatablePageStore $translatablePageStore,
23 private readonly MessageBundleStore $messageBundleStore,
24 ) {
25 }
26
28 public function getBundle( PageIdentity $page ): ?TranslatableBundle {
29 if ( TranslatablePage::isSourcePage( $page ) ) {
30 return TranslatablePage::newFromTitle( $page );
31 } elseif ( MessageBundle::isSourcePage( $page ) ) {
32 return new MessageBundle( $page );
33 }
34
35 return null;
36 }
37
39 public function getValidBundle( PageIdentity $page ): TranslatableBundle {
40 $bundle = $this->getBundle( $page );
41 if ( $bundle ) {
42 return $bundle;
43 }
44
45 throw new InvalidArgumentException( "$page is not a TranslatableBundle" );
46 }
47
48 public function getBundleFromClass( PageIdentity $page, string $bundleType ): TranslatableBundle {
49 if ( $bundleType === MessageBundle::class ) {
50 return new MessageBundle( $page );
51 } else {
52 return TranslatablePage::newFromTitle( $page );
53 }
54 }
55
56 public function getPageMoveLogger( TranslatableBundle $bundle ): PageMoveLogger {
57 if ( $bundle instanceof TranslatablePage ) {
58 return new PageMoveLogger( $bundle->getTitle(), 'pagetranslation' );
59 } elseif ( $bundle instanceof MessageBundle ) {
60 return new PageMoveLogger( $bundle->getTitle(), 'messagebundle' );
61 }
62
63 throw new InvalidArgumentException( 'Unknown TranslatableBundle type: ' . get_class( $bundle ) );
64 }
65
66 public function getPageDeleteLogger( TranslatableBundle $bundle ): PageDeleteLogger {
67 if ( $bundle instanceof TranslatablePage ) {
68 return new PageDeleteLogger( $bundle->getTitle(), 'pagetranslation' );
69 } elseif ( $bundle instanceof MessageBundle ) {
70 return new PageDeleteLogger( $bundle->getTitle(), 'messagebundle' );
71 }
72
73 throw new InvalidArgumentException( 'Unknown TranslatableBundle type: ' . get_class( $bundle ) );
74 }
75
76 public function getStore( TranslatableBundle $bundle ): TranslatableBundleStore {
77 if ( $bundle instanceof TranslatablePage ) {
78 return $this->translatablePageStore;
79 } elseif ( $bundle instanceof MessageBundle ) {
80 return $this->messageBundleStore;
81 }
82
83 throw new InvalidArgumentException( "Unknown TranslatableBundle type: " . get_class( $bundle ) );
84 }
85}
Create instances of various classes based on the type of TranslatableBundle.
getValidBundle(PageIdentity $page)
Return a TranslatableBundle from the Title, throwing an error if it is not a TranslatableBundle.
getBundle(PageIdentity $page)
Returns a TranslatableBundle if Title is a valid translatable bundle else returns null.
Translatable bundle represents a message group where its translatable content is defined on a wiki pa...
Mixed bag of methods related to translatable pages.