Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 48 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 1 |
ArchivedPager | |
0.00% |
0 / 48 |
|
0.00% |
0 / 4 |
306 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
getQueryInfo | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
2 | |||
getStatus | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getLinks | |
0.00% |
0 / 30 |
|
0.00% |
0 / 1 |
210 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\SecurePoll\Pages; |
4 | |
5 | use MediaWiki\Html\Html; |
6 | use MediaWiki\Linker\LinkRenderer; |
7 | use MediaWiki\Pager\IndexPager; |
8 | use Wikimedia\Rdbms\ILoadBalancer; |
9 | |
10 | /** |
11 | * Pager for an archived election list. See TablePager documentation. |
12 | */ |
13 | class ArchivedPager extends ElectionPager { |
14 | private array $subpages = [ |
15 | 'unarchive' => [ |
16 | 'public' => false, |
17 | 'visible-after-start' => false, |
18 | 'visible-after-close' => true, |
19 | 'token' => true |
20 | ] |
21 | ]; |
22 | private LinkRenderer $linkRenderer; |
23 | private ILoadBalancer $loadBalancer; |
24 | |
25 | public function __construct( |
26 | ArchivedPage $specialPage, |
27 | LinkRenderer $linkRenderer, |
28 | ILoadBalancer $loadBalancer |
29 | ) { |
30 | $this->mDefaultDirection = IndexPager::DIR_DESCENDING; |
31 | parent::__construct(); |
32 | $this->page = $specialPage; |
33 | $this->linkRenderer = $linkRenderer; |
34 | $this->loadBalancer = $loadBalancer; |
35 | } |
36 | |
37 | /** |
38 | * Return query paramters in array form to get archived elections |
39 | */ |
40 | public function getQueryInfo(): array { |
41 | $subquery = $this->loadBalancer->getConnection( ILoadBalancer::DB_REPLICA )->newSelectQueryBuilder() |
42 | ->select( 'pr_entity' ) |
43 | ->from( 'securepoll_properties' ) |
44 | ->where( [ 'pr_key' => 'is-archived' ] ) |
45 | ->caller( __METHOD__ ); |
46 | |
47 | return [ |
48 | 'tables' => 'securepoll_elections', |
49 | 'fields' => '*', |
50 | 'conds' => [ |
51 | 'el_entity IN (' . $subquery->getSQL() . ')', |
52 | ], |
53 | ]; |
54 | } |
55 | |
56 | /** |
57 | * @return string HTML |
58 | */ |
59 | public function getStatus(): string { |
60 | return $this->msg( 'securepoll-status-archived' )->escaped(); |
61 | } |
62 | |
63 | /** |
64 | * @return string HTML |
65 | */ |
66 | public function getLinks(): string { |
67 | $pollId = $this->mCurrentRow->el_entity; |
68 | $html = ''; |
69 | $separator = $this->msg( 'pipe-separator' )->escaped(); |
70 | foreach ( $this->subpages as $subpage => $props ) { |
71 | // Message keys used here: |
72 | // securepoll-subpage-unarchive |
73 | $linkText = $this->msg( "securepoll-subpage-$subpage" )->text(); |
74 | |
75 | if ( $html !== '' ) { |
76 | $html .= $separator; |
77 | } |
78 | |
79 | $needsHyperlink = |
80 | ( $this->isAdmin || $props['public'] ) && |
81 | ( |
82 | !$this->election->isStarted() || |
83 | ( $this->election->isStarted() && $this->election->isFinished() ) || |
84 | $props['visible-after-start'] |
85 | ) && |
86 | ( !$this->election->isFinished() || $props['visible-after-close'] ); |
87 | if ( $needsHyperlink ) { |
88 | $queryParams = []; |
89 | if ( isset( $props['token'] ) && $props['token'] ) { |
90 | $queryParams[ 'token' ] = $this->page->specialPage->getContext() |
91 | ->getCsrfTokenSet()->getToken(); |
92 | } |
93 | if ( isset( $props['link'] ) ) { |
94 | $html .= $this->{$props['link']}( $pollId ); |
95 | } else { |
96 | $title = $this->page->specialPage->getPageTitle( "$subpage/$pollId" ); |
97 | $html .= $this->linkRenderer->makeKnownLink( $title, $linkText, [], $queryParams ); |
98 | } |
99 | } else { |
100 | $html .= Html::element( |
101 | 'span', |
102 | [ 'class' => 'securepoll-link-disabled' ], |
103 | $linkText |
104 | ); |
105 | } |
106 | } |
107 | |
108 | return $html; |
109 | } |
110 | } |