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