Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 51 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
HTMLFormRadioRangeColumnLabels | |
0.00% |
0 / 51 |
|
0.00% |
0 / 3 |
506 | |
0.00% |
0 / 1 |
loadDataFromRequest | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
72 | |||
validate | |
0.00% |
0 / 17 |
|
0.00% |
0 / 1 |
90 | |||
getInputHTML | |
0.00% |
0 / 21 |
|
0.00% |
0 / 1 |
30 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\SecurePoll\HtmlForm; |
4 | |
5 | use MediaWiki\HTMLForm\HTMLFormField; |
6 | use OOUI; |
7 | |
8 | /** |
9 | * A table for the RadioRangeBallot message inputs. |
10 | */ |
11 | class HTMLFormRadioRangeColumnLabels extends HTMLFormField { |
12 | /** @inheritDoc */ |
13 | public function loadDataFromRequest( $request ) { |
14 | $values = $request->getArray( $this->mName ); |
15 | if ( $values === null ) { |
16 | return $this->getDefault(); |
17 | } |
18 | |
19 | $neg = false; |
20 | foreach ( $values as $k => $v ) { |
21 | if ( preg_match( '/^-\d+$/', $k ) ) { |
22 | $neg = true; |
23 | } |
24 | } |
25 | |
26 | $ret = []; |
27 | foreach ( $values as $k => $v ) { |
28 | if ( preg_match( '/^-?\d+$/', $k ) ) { |
29 | $key = ( $neg && $k > 0 ) ? "+$k" : $k; |
30 | $ret["column$key"] = $v; |
31 | } |
32 | } |
33 | |
34 | return $ret; |
35 | } |
36 | |
37 | /** @inheritDoc */ |
38 | public function validate( $value, $alldata ) { |
39 | // Don't bother to validate the value of HTMLFormCloner template. |
40 | if ( strpos( $this->mName, 'HTMLFormFieldCloner' ) ) { |
41 | return true; |
42 | } |
43 | |
44 | $p = parent::validate( $value, $alldata ); |
45 | if ( $p !== true ) { |
46 | return $p; |
47 | } |
48 | |
49 | $min = (string)$this->getNearestFieldValue( $alldata, 'min-score' ); |
50 | $max = (string)$this->getNearestFieldValue( $alldata, 'max-score' ); |
51 | if ( !preg_match( '/^-?\d+$/', $min ) || !preg_match( '/^-?\d+$/', $max ) ) { |
52 | return true; |
53 | } |
54 | |
55 | for ( $i = $min; $i <= $max; $i++ ) { |
56 | $key = ( $min < 0 && $i > 0 ) ? "+$i" : $i; |
57 | if ( !isset( $value["column$key"] ) ) { |
58 | return $this->msg( |
59 | 'securepoll-htmlform-radiorange-missing-message', |
60 | $key |
61 | )->parseAsBlock(); |
62 | } |
63 | } |
64 | |
65 | return true; |
66 | } |
67 | |
68 | /** @inheritDoc */ |
69 | public function getInputHTML( $value ) { |
70 | $inputs = []; |
71 | |
72 | foreach ( (array)$value as $k => $v ) { |
73 | if ( !preg_match( '/^column([-+]?)(\d+)$/', $k, $m ) ) { |
74 | // Ignore "text" |
75 | continue; |
76 | } |
77 | $signedColNum = $m[1] . $m[2]; |
78 | $intColNum = $m[1] === '-' ? $signedColNum : $m[2]; |
79 | |
80 | $inputs[] = ( new OOUI\FieldLayout( |
81 | new OOUI\TextInputWidget( [ |
82 | 'value' => $v, |
83 | 'name' => "{$this->mName}[$intColNum]", |
84 | 'disabled' => isset( $this->mParams['disabled'] ) && $this->mParams['disabled'], |
85 | ] ), |
86 | [ |
87 | 'label' => $signedColNum, |
88 | 'align' => 'top', |
89 | ] |
90 | ) )->setAttributes( [ 'data-securepoll-col-num' => $intColNum ] ); |
91 | } |
92 | |
93 | return ( new OOUI\Widget( [ |
94 | 'content' => new OOUI\HorizontalLayout( [ 'items' => $inputs ] ), |
95 | 'classes' => [ 'securepoll-radiorange-messages' ], |
96 | ] ) )->setAttributes( [ 'data-securepoll-col-name' => $this->mName, ] ); |
97 | } |
98 | } |