Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
LuaProjectsAttributeResolver
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 3
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 resolve
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
 makeArrayOneBased
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace MediaWiki\Extension\PageAssessments;
4
5use MediaWiki\Config\Config;
6use MediaWiki\Extension\Scribunto\Engines\LuaCommon\TitleAttributeResolver;
7use MediaWiki\Linker\LinkTarget;
8use MediaWiki\Title\Title;
9
10class LuaProjectsAttributeResolver extends TitleAttributeResolver {
11
12    private bool $assessmentsOnTalkPage;
13
14    public function __construct( Config $config ) {
15        $this->assessmentsOnTalkPage = $config->get( 'PageAssessmentsOnTalkPages' );
16    }
17
18    /**
19     * @param LinkTarget $target
20     * @return array
21     */
22    public function resolve( LinkTarget $target ) {
23        $title = Title::newFromLinkTarget( $target );
24        $talkTitle = $title->getTalkPageIfDefined();
25
26        $assessmentPageTitle = $this->assessmentsOnTalkPage ? $talkTitle : $title;
27
28        if ( !$assessmentPageTitle || !$assessmentPageTitle->canExist() ) {
29            return [];
30        }
31        $this->addTemplateLink( $assessmentPageTitle );
32        $this->incrementExpensiveFunctionCount();
33
34        $projects = PageAssessmentsDAO::getAllAssessments( $title->getId() );
35        // Sort to ensure output is stable
36        sort( $projects );
37        return self::makeArrayOneBased( $projects );
38    }
39
40    /**
41     * Renumber an array for return to Lua. Duplicates Scribunto TitleLibrary::makeArrayOneBased.
42     * TODO: unify them.
43     *
44     * @param array $arr
45     * @return array
46     */
47    private static function makeArrayOneBased( array $arr ) {
48        if ( !$arr ) {
49            return $arr;
50        }
51        return array_combine( range( 1, count( $arr ) ), array_values( $arr ) );
52    }
53}