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 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
BallotStatus
0.00% covered (danger)
0.00%
0 / 48
0.00% covered (danger)
0.00%
0 / 4
240
0.00% covered (danger)
0.00%
0 / 1
 spFatal
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 getIds
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 spGetHTML
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
90
 spGetMessageText
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace MediaWiki\Extension\SecurePoll\Ballots;
4
5use MediaWiki\Status\Status;
6use OOUI\ButtonInputWidget;
7use OOUI\MessageWidget;
8use Wikimedia\Message\MessageParam;
9use Wikimedia\Message\MessageSpecifier;
10
11class BallotStatus extends Status {
12    /** @var true[] */
13    public $ids = [];
14
15    /**
16     * @param string|MessageSpecifier $message
17     * @param string $id
18     * @param bool $localized
19     * @phpcs:ignore Generic.Files.LineLength
20     * @param MessageParam|MessageSpecifier|string|int|float|list<MessageParam|MessageSpecifier|string|int|float> ...$params
21     */
22    public function spFatal( $message, $id, $localized, ...$params ) {
23        $this->errors[] = [
24            'type' => 'error',
25            'securepoll-id' => $id,
26            'message' => $message,
27            'params' => $params,
28            'localized' => $localized
29        ];
30        $this->ids[$id] = true;
31        $this->ok = false;
32    }
33
34    /**
35     * @return true[]
36     */
37    public function getIds() {
38        return $this->ids;
39    }
40
41    /**
42     * @param array $usedIds
43     * @return string
44     */
45    public function spGetHTML( $usedIds ) {
46        if ( !$this->errors ) {
47            return '';
48        }
49        $s = '<ul>';
50        $usedIds = [];
51        $text = '';
52        foreach ( $this->errors as $error ) {
53            if ( !isset( $error['localized'] ) || !$error['localized'] ) {
54                $text = wfMessage( $error['message'], $error['params'] )->text();
55                if ( isset( $error['securepoll-id'] ) ) {
56                    $id = $error['securepoll-id'];
57                    if ( !isset( $usedIds[$id] ) ) {
58                        $name = explode( '_', urlencode( "$id" ) );
59                        $usedIds[ $name[0] . '_' . $name[1] ][] = urlencode( "$id" );
60                    }
61                } elseif ( !isset( $error['securepoll-id'] ) ) {
62                    $s .= new MessageWidget( [
63                        'type' => 'error',
64                        'label' => htmlspecialchars( $text )
65                    ] ) . "\n";
66                }
67            }
68        }
69
70        if ( count( $usedIds ) > 0 ) {
71            $error = new MessageWidget( [
72                'type' => 'error',
73                'label' => htmlspecialchars( $text )
74            ] );
75            $buttonWidget = new ButtonInputWidget( [
76                'label' => wfMessage( 'securepoll-ballot-show-warnings' )->text(),
77                'classes' => [ 'highlight-warnings-button' ],
78                'infusable' => true,
79                'data' => json_encode( $usedIds ),
80                'showErrors' => false
81            ] );
82            $error->appendContent( $buttonWidget );
83            $s .= $error . "<br>";
84        }
85
86        $s .= "</ul>\n";
87        return $s;
88    }
89
90    /**
91     * @param string $id
92     * @return string
93     */
94    public function spGetMessageText( $id ) {
95        foreach ( $this->errors as $error ) {
96            if ( !isset( $error['securepoll-id'] ) || $error['securepoll-id'] !== $id ) {
97                continue;
98            }
99
100            return wfMessage( $error['message'], $error['params'] )->text();
101        }
102    }
103}