Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
HTMLZLanguageSelectField
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
12
 getOptions
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2/**
3 * WikiLambda HTMLSelectZLanguageField extends HTMLSelectField
4 *
5 * @file
6 * @ingroup Extensions
7 * @copyright 2020– Abstract Wikipedia team; see AUTHORS.txt
8 * @license MIT
9 */
10
11namespace MediaWiki\Extension\WikiLambda\Fields;
12
13use MediaWiki\Context\RequestContext;
14use MediaWiki\Extension\WikiLambda\Registry\ZLangRegistry;
15use MediaWiki\Extension\WikiLambda\WikiLambdaServices;
16use MediaWiki\HTMLForm\Field\HTMLSelectField;
17use MediaWiki\HTMLForm\HTMLForm;
18
19class HTMLZLanguageSelectField extends HTMLSelectField {
20
21    /**
22     * @inheritDoc
23     */
24    public function __construct( $params ) {
25        parent::__construct( $params );
26
27        // Get user language to select best labels for each item
28        $language = ( $this->mParent instanceof HTMLForm ) ?
29            $this->mParent->getLanguage() :
30            RequestContext::getMain()->getLanguage();
31        $languageCode = $language->getCode();
32
33        // Get all valid WikiLambda languages: zids, codes and labels
34        $zObjectStore = WikiLambdaServices::getZObjectStore();
35        $languages = $zObjectStore->fetchAllZLanguagesWithLabels( $languageCode );
36        $languageZid = ZLangRegistry::singleton()->getLanguageZidFromCode( $languageCode, true );
37
38        // Create the options array with all existing ZLanguages
39        foreach ( $languages as $row ) {
40            $langCode = htmlspecialchars( $row->wlzlangs_language ?? '' );
41            $langZid = htmlspecialchars( $row->wlzl_zobject_zid ?? '' );
42            $info = $this->msg( 'parentheses' )
43                ->rawParams( $language->commaList( [ $langCode, $langZid ] ) )
44                ->parse();
45            $label = $row->wlzl_label . ' ' . $info;
46            $this->mParams[ 'options' ][ $label ] = $row->wlzl_zobject_zid;
47        }
48
49        $this->mParams[ 'default' ] ??= $languageZid;
50    }
51
52    /**
53     * @inheritDoc
54     */
55    public function getOptions() {
56        if ( $this->mOptions === null ) {
57            return [];
58        }
59
60        return parent::getOptions();
61    }
62}