Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
93.33% covered (success)
93.33%
14 / 15
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserNameListener
93.33% covered (success)
93.33%
14 / 15
66.67% covered (warning)
66.67%
2 / 3
9.02
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 onAfterClear
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 onAfterLoad
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2/**
3 * Provide usernames filtered by per-wiki ipblocks. Batches together
4 * database requests for multiple usernames when possible.
5 */
6namespace Flow\Data\Listener;
7
8use Flow\Repository\UserNameBatch;
9use MediaWiki\WikiMap\WikiMap;
10
11/**
12 * Listen for loaded objects and pre-load their user id fields into
13 * a batch username loader.
14 */
15class UserNameListener extends AbstractListener {
16    /** @var UserNameBatch */
17    protected $batch;
18    /** @var array */
19    protected $keys;
20    /** @var string */
21    protected $wiki;
22
23    /**
24     * @param UserNameBatch $batch
25     * @param array $keys key - a list of keys from storage that contain user ids, value - the wiki for the
26     *   user id lookup, default to $wiki if null
27     * @param string|null $wiki The wikiid to use when $wikiKey is null. If both are null WikiMap::getCurrentWikiId() is used
28     */
29    public function __construct( UserNameBatch $batch, array $keys, $wiki = null ) {
30        $this->batch = $batch;
31        $this->keys = $keys;
32
33        if ( $wiki === null ) {
34            $this->wiki = WikiMap::getCurrentWikiId();
35        } else {
36            $this->wiki = $wiki;
37        }
38    }
39
40    public function onAfterClear() {
41        $this->batch->clear();
42    }
43
44    /**
45     * Load any user ids in $row into the username batch
46     * @param object $object
47     * @param array $row
48     */
49    public function onAfterLoad( $object, array $row ) {
50        foreach ( $this->keys as $userKey => $wikiKey ) {
51            // check if the user id key exists in the data array and
52            // make sure it has a non-zero value
53            if ( isset( $row[$userKey] ) && $row[$userKey] != 0 ) {
54                // the wiki for the user id lookup is specified,
55                // check if it exists in the data array
56                if ( $wikiKey ) {
57                    if ( !isset( $row[$wikiKey] ) ) {
58                        wfDebugLog( 'Flow', __METHOD__ . ": could not detect wiki with " . $wikiKey );
59                        continue;
60                    }
61                    $wiki = $row[$wikiKey];
62                // no wiki lookup is specified, default to $this->wiki
63                } else {
64                    $wiki = $this->wiki;
65                }
66                $this->batch->add( $wiki, $row[$userKey] );
67            }
68        }
69    }
70}