2declare( strict_types = 1 );
4namespace MediaWiki\Extension\Translate\MessageGroupConfiguration;
6use InvalidArgumentException;
26 public function __construct(
44 return $this->instantiate( $class, $conf );
58 $basic = $conf[
'BASIC'] ?? [];
59 $hasType = isset( $basic[
'type'] );
60 $hasClass = isset( $basic[
'class'] );
62 if ( $hasType && $hasClass ) {
64 "Message group configuration must not specify both 'type' and 'class' " .
65 "(group id: '{$basic['id']}')"
69 if ( !$hasType && !$hasClass ) {
71 "Message group configuration must specify either 'type' or 'class' " .
72 "(group id: '{$basic['id']}')"
77 return $this->typeRegistry->getClass( $basic[
'type'] );
80 return $basic[
'class'];
91 private function instantiate(
string $class, array $conf ): MessageGroup {
92 if ( !class_exists( $class ) ) {
93 throw new InvalidArgumentException(
94 "Message group implementation class '$class' does not exist or cannot be autoloaded"
98 if ( !is_subclass_of( $class, MessageGroupBase::class ) ) {
99 throw new InvalidArgumentException(
100 "Message group implementation class '$class' must extend MessageGroupBase"
104 return MessageGroupBase::newFromConf( $class, $conf );