]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/EventRelayerGroup.php
MediaWiki 1.30.2-scripts2
[autoinstallsdev/mediawiki.git] / includes / EventRelayerGroup.php
1 <?php
2 /**
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation; either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16  * http://www.gnu.org/copyleft/gpl.html
17  *
18  * @file
19  */
20
21 use MediaWiki\MediaWikiServices;
22
23 /**
24  * Factory class for spawning EventRelayer objects using configuration
25  *
26  * @since 1.27
27  */
28 class EventRelayerGroup {
29         /** @var array[] */
30         protected $configByChannel = [];
31
32         /** @var EventRelayer[] */
33         protected $relayers = [];
34
35         /**
36          * @param array[] $config Channel configuration
37          */
38         public function __construct( array $config ) {
39                 $this->configByChannel = $config;
40         }
41
42         /**
43          * @deprecated since 1.27 Use MediaWikiServices::getInstance()->getEventRelayerGroup()
44          * @return EventRelayerGroup
45          */
46         public static function singleton() {
47                 return MediaWikiServices::getInstance()->getEventRelayerGroup();
48         }
49
50         /**
51          * @param string $channel
52          * @return EventRelayer Relayer instance that handles the given channel
53          */
54         public function getRelayer( $channel ) {
55                 $channelKey = isset( $this->configByChannel[$channel] )
56                         ? $channel
57                         : 'default';
58
59                 if ( !isset( $this->relayers[$channelKey] ) ) {
60                         if ( !isset( $this->configByChannel[$channelKey] ) ) {
61                                 throw new UnexpectedValueException( "No config for '$channelKey'" );
62                         }
63
64                         $config = $this->configByChannel[$channelKey];
65                         $class = $config['class'];
66
67                         $this->relayers[$channelKey] = new $class( $config );
68                 }
69
70                 return $this->relayers[$channelKey];
71         }
72 }