Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
EditBoxBuilderFactory
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
4 / 4
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 newEditBoxBuilder
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 newPlainBoxBuilder
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 newAceBoxBuilder
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter\EditBox;
4
5use LogicException;
6use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionManager;
7use MediaWiki\Extension\AbuseFilter\KeywordsManager;
8use MediaWiki\Output\OutputPage;
9use MediaWiki\Permissions\Authority;
10use MessageLocalizer;
11
12/**
13 * Factory for EditBoxBuilder objects
14 */
15class EditBoxBuilderFactory {
16
17    public const SERVICE_NAME = 'AbuseFilterEditBoxBuilderFactory';
18
19    /** @var AbuseFilterPermissionManager */
20    private $afPermManager;
21
22    /** @var KeywordsManager */
23    private $keywordsManager;
24
25    /** @var bool */
26    private $isCodeEditorLoaded;
27
28    /**
29     * @param AbuseFilterPermissionManager $afPermManager
30     * @param KeywordsManager $keywordsManager
31     * @param bool $isCodeEditorLoaded
32     */
33    public function __construct(
34        AbuseFilterPermissionManager $afPermManager,
35        KeywordsManager $keywordsManager,
36        bool $isCodeEditorLoaded
37    ) {
38        $this->afPermManager = $afPermManager;
39        $this->keywordsManager = $keywordsManager;
40        $this->isCodeEditorLoaded = $isCodeEditorLoaded;
41    }
42
43    /**
44     * Returns a builder, preferring the Ace version if available
45     * @param MessageLocalizer $messageLocalizer
46     * @param Authority $authority
47     * @param OutputPage $output
48     * @return EditBoxBuilder
49     */
50    public function newEditBoxBuilder(
51        MessageLocalizer $messageLocalizer,
52        Authority $authority,
53        OutputPage $output
54    ): EditBoxBuilder {
55        return $this->isCodeEditorLoaded
56            ? $this->newAceBoxBuilder( $messageLocalizer, $authority, $output )
57            : $this->newPlainBoxBuilder( $messageLocalizer, $authority, $output );
58    }
59
60    /**
61     * @param MessageLocalizer $messageLocalizer
62     * @param Authority $authority
63     * @param OutputPage $output
64     * @return PlainEditBoxBuilder
65     */
66    public function newPlainBoxBuilder(
67        MessageLocalizer $messageLocalizer,
68        Authority $authority,
69        OutputPage $output
70    ): PlainEditBoxBuilder {
71        return new PlainEditBoxBuilder(
72            $this->afPermManager,
73            $this->keywordsManager,
74            $messageLocalizer,
75            $authority,
76            $output
77        );
78    }
79
80    /**
81     * @param MessageLocalizer $messageLocalizer
82     * @param Authority $authority
83     * @param OutputPage $output
84     * @return AceEditBoxBuilder
85     */
86    public function newAceBoxBuilder(
87        MessageLocalizer $messageLocalizer,
88        Authority $authority,
89        OutputPage $output
90    ): AceEditBoxBuilder {
91        if ( !$this->isCodeEditorLoaded ) {
92            throw new LogicException( 'Cannot create Ace box without CodeEditor' );
93        }
94        return new AceEditBoxBuilder(
95            $this->afPermManager,
96            $this->keywordsManager,
97            $messageLocalizer,
98            $authority,
99            $output,
100            $this->newPlainBoxBuilder(
101                $messageLocalizer,
102                $authority,
103                $output
104            )
105        );
106    }
107
108}