Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
QualityStatsBuilder
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
7
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
 buildStatsForPaginationWithOverride
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2
3namespace ProofreadPage\Index;
4
5use MediaWiki\Title\Title;
6use ProofreadPage\Page\PageQualityLevelLookup;
7use ProofreadPage\Pagination\Pagination;
8
9/**
10 * @license GPL-2.0-or-later
11 */
12class QualityStatsBuilder {
13
14    /** @var PageQualityLevelLookup */
15    private $pageQualityLevelLookup;
16
17    /**
18     * @param PageQualityLevelLookup $pageQualityLevelLookup
19     */
20    public function __construct( PageQualityLevelLookup $pageQualityLevelLookup ) {
21        $this->pageQualityLevelLookup = $pageQualityLevelLookup;
22    }
23
24    /**
25     * @param Pagination $pagination
26     * @param Title|null $overridePage
27     * @param int|null $overridePageLevel
28     * @return PagesQualityStats
29     */
30    public function buildStatsForPaginationWithOverride(
31        Pagination $pagination,
32        Title $overridePage = null,
33        int $overridePageLevel = null
34    ): PagesQualityStats {
35        $pages = iterator_to_array( $pagination );
36        $this->pageQualityLevelLookup->prefetchQualityLevelForTitles( $pages );
37
38        $numberOfPagesByLevel = [];
39        foreach ( $pages as $pageTitle ) {
40            if ( $overridePage !== null && $pageTitle->equals( $overridePage ) ) {
41                $pageQualityLevel = $overridePageLevel;
42            } else {
43                $pageQualityLevel = $this->pageQualityLevelLookup->getQualityLevelForPageTitle( $pageTitle );
44            }
45            if ( $pageQualityLevel === null ) {
46                continue;
47            }
48
49            if ( array_key_exists( $pageQualityLevel, $numberOfPagesByLevel ) ) {
50                $numberOfPagesByLevel[$pageQualityLevel]++;
51            } else {
52                $numberOfPagesByLevel[$pageQualityLevel] = 1;
53            }
54        }
55
56        return new PagesQualityStats( $pagination->getNumberOfPages(), $numberOfPagesByLevel );
57    }
58}