Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
28 / 28
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
FilterRunnerFactory
100.00% covered (success)
100.00%
28 / 28
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 newRunner
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter;
4
5use MediaWiki\Config\ServiceOptions;
6use MediaWiki\Extension\AbuseFilter\ChangeTags\ChangeTagger;
7use MediaWiki\Extension\AbuseFilter\Consequences\ConsequencesExecutorFactory;
8use MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner;
9use MediaWiki\Extension\AbuseFilter\Parser\RuleCheckerFactory;
10use MediaWiki\Extension\AbuseFilter\Variables\VariableHolder;
11use MediaWiki\Extension\AbuseFilter\Variables\VariablesManager;
12use MediaWiki\Extension\AbuseFilter\Watcher\EmergencyWatcher;
13use MediaWiki\Extension\AbuseFilter\Watcher\UpdateHitCountWatcher;
14use MediaWiki\Title\Title;
15use MediaWiki\User\User;
16use Psr\Log\LoggerInterface;
17use Wikimedia\ObjectCache\BagOStuff;
18use Wikimedia\Stats\StatsFactory;
19
20class FilterRunnerFactory {
21    public const SERVICE_NAME = ServiceNames::FilterRunnerFactory;
22
23    public function __construct(
24        private readonly AbuseFilterHookRunner $hookRunner,
25        private readonly FilterProfiler $filterProfiler,
26        private readonly ChangeTagger $changeTagger,
27        private readonly FilterLookup $filterLookup,
28        private readonly RuleCheckerFactory $ruleCheckerFactory,
29        private readonly ConsequencesExecutorFactory $consExecutorFactory,
30        private readonly AbuseLoggerFactory $abuseLoggerFactory,
31        private readonly VariablesManager $varManager,
32        private readonly EmergencyCache $emergencyCache,
33        private readonly UpdateHitCountWatcher $updateHitCountWatcher,
34        private readonly EmergencyWatcher $emergencyWatcher,
35        private readonly BagOStuff $localCache,
36        private readonly LoggerInterface $logger,
37        private readonly LoggerInterface $editStashLogger,
38        private readonly StatsFactory $statsFactory,
39        private readonly ServiceOptions $options
40    ) {
41    }
42
43    /**
44     * @param User $user
45     * @param Title $title
46     * @param VariableHolder $vars
47     * @param string $group
48     * @return FilterRunner
49     */
50    public function newRunner(
51        User $user,
52        Title $title,
53        VariableHolder $vars,
54        string $group
55    ): FilterRunner {
56        // TODO Add a method to this class taking these as params? Add a hook for custom watchers
57        $watchers = [ $this->updateHitCountWatcher, $this->emergencyWatcher ];
58        return new FilterRunner(
59            $this->hookRunner,
60            $this->filterProfiler,
61            $this->changeTagger,
62            $this->filterLookup,
63            $this->ruleCheckerFactory,
64            $this->consExecutorFactory,
65            $this->abuseLoggerFactory,
66            $this->varManager,
67            $this->emergencyCache,
68            $watchers,
69            new EditStashCache(
70                $this->localCache,
71                // Bots do not use edit stashing, so avoid distorting the stats
72                $user->isBot() ? StatsFactory::newNull() : $this->statsFactory,
73                $this->varManager,
74                $this->editStashLogger,
75                $title,
76                $group
77            ),
78            $this->logger,
79            $this->options,
80            $user,
81            $title,
82            $vars,
83            $group
84        );
85    }
86}