Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
SpamRegex
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 validate
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
 enabled
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Flow\SpamFilter;
4
5use Flow\Model\AbstractRevision;
6use MediaWiki\Context\IContextSource;
7use MediaWiki\Status\Status;
8use MediaWiki\Title\Title;
9
10class SpamRegex implements SpamFilter {
11    /**
12     * @param IContextSource $context
13     * @param AbstractRevision $newRevision
14     * @param AbstractRevision|null $oldRevision
15     * @param Title $title
16     * @param Title $ownerTitle
17     * @return Status
18     */
19    public function validate(
20        IContextSource $context,
21        AbstractRevision $newRevision,
22        ?AbstractRevision $oldRevision,
23        Title $title,
24        Title $ownerTitle
25    ) {
26        global $wgSpamRegex;
27
28        /*
29         * This should not cause an extra conversion; SpamRegex checks will be
30         * performed upon submitting new content.  Content is always either
31         * submitted in (topic-title-)wikitext, or submitted in HTML, but
32         * immediately converted to wikitext and then treated as such. It will only
33         * be transformed once it's being saved to DB.
34         */
35        $text = $newRevision->getContentInWikitext();
36
37        // back compat, $wgSpamRegex may be a single string or an array of regexes
38        $regexes = (array)$wgSpamRegex;
39
40        foreach ( $regexes as $regex ) {
41            if ( preg_match( $regex, $text, $matches ) ) {
42                return Status::newFatal( 'spamprotectionmatch', $matches[0] );
43            }
44        }
45
46        return Status::newGood();
47    }
48
49    /**
50     * Checks if SpamRegex is enabled.
51     *
52     * @return bool
53     */
54    public function enabled() {
55        global $wgSpamRegex;
56        return (bool)$wgSpamRegex;
57    }
58}