Passed
Push — master ( a192f6...3a1f1a )
by Daimona
02:01
created

MessageProvider::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 3
rs 10
1
<?php declare( strict_types = 1 );
2
3
namespace BotRiconferme;
4
5
use BotRiconferme\Exception\MessageNotFoundException;
6
use BotRiconferme\Exception\MessagesPageDoesNotExistException;
7
use BotRiconferme\Exception\MissingPageException;
8
use BotRiconferme\Wiki\Wiki;
9
10
class MessageProvider {
11
	/** @var array|null */
12
	private static $messages;
13
14
	/** @var Wiki */
15
	private $wiki;
16
	/** @var string */
17
	private $msgTitle;
18
19
	/**
20
	 * @param Wiki $wiki
21
	 * @param string $msgTitle
22
	 */
23
	public function __construct( Wiki $wiki, string $msgTitle ) {
24
		$this->wiki = $wiki;
25
		$this->msgTitle = $msgTitle;
26
	}
27
28
	/**
29
	 * @throws MessagesPageDoesNotExistException
30
	 */
31
	private function grabWikiMessages() : void {
32
		if ( self::$messages !== null ) {
33
			return;
34
		}
35
		try {
36
			$cont = $this->wiki->getPageContent( $this->msgTitle );
37
			self::$messages = json_decode( $cont, true );
38
		} catch ( MissingPageException $_ ) {
39
			throw new MessagesPageDoesNotExistException( 'Please create a messages page.' );
40
		}
41
	}
42
43
	/**
44
	 * @param string $key
45
	 * @return Message
46
	 * @throws MessageNotFoundException
47
	 */
48
	public function getMessage( string $key ) : Message {
49
		$this->grabWikiMessages();
50
		if ( !isset( self::$messages[ $key ] ) ) {
51
			throw new MessageNotFoundException( "Message '$key' does not exist." );
52
		}
53
		// @phan-suppress-next-line PhanTypeArraySuspiciousNullable
54
		return new Message( self::$messages[$key] );
55
	}
56
}
57