Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 48
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
HTMLSelectField
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 5
240
0.00% covered (danger)
0.00%
0 / 1
 validate
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 getInputHTML
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
 getInputOOUI
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
12
 getInputCodex
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
20
 shouldInfuseOOUI
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\HTMLForm\Field;
4
5use MediaWiki\HTMLForm\HTMLFormField;
6use XmlSelect;
7
8/**
9 * A select dropdown field.  Basically a wrapper for Xmlselect class
10 *
11 * @stable to extend
12 */
13class HTMLSelectField extends HTMLFormField {
14
15    /**
16     * @inheritDoc
17     * @stable to override
18     */
19    public function validate( $value, $alldata ) {
20        $p = parent::validate( $value, $alldata );
21
22        if ( $p !== true ) {
23            return $p;
24        }
25
26        $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
27
28        if ( in_array( strval( $value ), $validOptions, true ) ) {
29            return true;
30        } else {
31            return $this->msg( 'htmlform-select-badoption' );
32        }
33    }
34
35    /**
36     * @inheritDoc
37     * @stable to override
38     */
39    public function getInputHTML( $value ) {
40        $select = new XmlSelect( $this->mName, $this->mID, strval( $value ) );
41
42        if ( !empty( $this->mParams['disabled'] ) ) {
43            $select->setAttribute( 'disabled', 'disabled' );
44        }
45
46        $allowedParams = [ 'tabindex', 'size' ];
47        $customParams = $this->getAttributes( $allowedParams );
48        foreach ( $customParams as $name => $value ) {
49            $select->setAttribute( $name, $value );
50        }
51
52        if ( $this->mClass !== '' ) {
53            $select->setAttribute( 'class', $this->mClass );
54        }
55
56        $select->addOptions( $this->getOptions() );
57
58        return $select->getHTML();
59    }
60
61    /**
62     * @inheritDoc
63     * @stable to override
64     */
65    public function getInputOOUI( $value ) {
66        $disabled = false;
67        $allowedParams = [ 'tabindex' ];
68        $attribs = \OOUI\Element::configFromHtmlAttributes(
69            $this->getAttributes( $allowedParams )
70        );
71
72        if ( $this->mClass !== '' ) {
73            $attribs['classes'] = [ $this->mClass ];
74        }
75
76        if ( !empty( $this->mParams['disabled'] ) ) {
77            $disabled = true;
78        }
79
80        return new \OOUI\DropdownInputWidget( [
81            'name' => $this->mName,
82            'id' => $this->mID,
83            'options' => $this->getOptionsOOUI(),
84            'value' => strval( $value ),
85            'disabled' => $disabled,
86        ] + $attribs );
87    }
88
89    public function getInputCodex( $value, $hasErrors ) {
90        $select = new XmlSelect( $this->mName, $this->mID, strval( $value ) );
91
92        if ( !empty( $this->mParams['disabled'] ) ) {
93            $select->setAttribute( 'disabled', 'disabled' );
94        }
95
96        $allowedParams = [ 'tabindex', 'size' ];
97        $customParams = $this->getAttributes( $allowedParams );
98        foreach ( $customParams as $name => $value ) {
99            $select->setAttribute( $name, $value );
100        }
101
102        // TODO: Add support for error class once it's implemented in the Codex CSS-only Select.
103        $selectClass = 'cdx-select';
104        $selectClass .= $this->mClass !== '' ? ' ' . $this->mClass : '';
105        $select->setAttribute( 'class', $selectClass );
106
107        $select->addOptions( $this->getOptions() );
108
109        return $select->getHTML();
110    }
111
112    /**
113     * @inheritDoc
114     * @stable to override
115     */
116    protected function shouldInfuseOOUI() {
117        return true;
118    }
119}
120
121/** @deprecated class alias since 1.42 */
122class_alias( HTMLSelectField::class, 'HTMLSelectField' );