Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
HTMLJsSelectToInputField
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 4
110
0.00% covered (danger)
0.00%
0 / 1
 getInputHTML
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 tidy
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 validate
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
42
 filter
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2declare( strict_types=1 );
3
4namespace MediaWiki\Extension\Translate\Utilities;
5
6use HTMLTextField;
7
8/**
9 * Implementation of JsSelectToInput class which is compatible with MediaWiki's preferences system
10 * @author Niklas Laxström
11 * @copyright Copyright © 2010 Niklas Laxström
12 * @license GPL-2.0-or-later
13 */
14class HTMLJsSelectToInputField extends HTMLTextField {
15    /** @inheritDoc */
16    public function getInputHTML( $value ): string {
17        $input = parent::getInputHTML( $value );
18
19        if ( isset( $this->mParams['select'] ) ) {
20            /** @var JsSelectToInput $select */
21            $select = $this->mParams['select'];
22            $input = $select->getHtmlAndPrepareJS() . '<br />' . $input;
23        }
24
25        return $input;
26    }
27
28    /** @return string[] */
29    protected function tidy( string $value ): array {
30        $value = array_map( 'trim', explode( ',', $value ) );
31        $value = array_unique( array_filter( $value ) );
32
33        return $value;
34    }
35
36    /** @inheritDoc */
37    public function validate( $value, $alldata ) {
38        $p = parent::validate( $value, $alldata );
39
40        if ( $p !== true ) {
41            return $p;
42        }
43
44        if ( !isset( $this->mParams['valid-values'] ) ) {
45            return true;
46        }
47
48        if ( $value === 'default' ) {
49            return true;
50        }
51
52        $codes = $this->tidy( $value );
53        $valid = array_flip( $this->mParams['valid-values'] );
54
55        foreach ( $codes as $code ) {
56            if ( !isset( $valid[$code] ) ) {
57                return wfMessage( 'translate-pref-editassistlang-bad', $code )->parseAsBlock();
58            }
59        }
60
61        return true;
62    }
63
64    /** @inheritDoc */
65    public function filter( $value, $alldata ) {
66        $value = parent::filter( $value, $alldata );
67
68        return implode( ', ', $this->tidy( $value ) );
69    }
70}