Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 42 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
ArchivedPager | |
0.00% |
0 / 42 |
|
0.00% |
0 / 3 |
210 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
getQueryInfo | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
2 | |||
getLinks | |
0.00% |
0 / 24 |
|
0.00% |
0 / 1 |
156 |
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 | /** @var array[] */ |
15 | private $subpages = [ |
16 | 'unarchive' => [ |
17 | 'public' => false, |
18 | 'visible-after-start' => false, |
19 | 'visible-after-close' => true, |
20 | ] |
21 | ]; |
22 | |
23 | /** @var LinkRenderer */ |
24 | private $linkRenderer; |
25 | /** @var ILoadBalancer */ |
26 | private $loadBalancer; |
27 | |
28 | /** |
29 | * @param ArchivedPage $specialPage |
30 | * @param LinkRenderer $linkRenderer |
31 | * @param ILoadBalancer $loadBalancer |
32 | */ |
33 | public function __construct( |
34 | ArchivedPage $specialPage, |
35 | LinkRenderer $linkRenderer, |
36 | ILoadBalancer $loadBalancer |
37 | ) { |
38 | $this->mDefaultDirection = IndexPager::DIR_DESCENDING; |
39 | parent::__construct(); |
40 | $this->page = $specialPage; |
41 | $this->linkRenderer = $linkRenderer; |
42 | $this->loadBalancer = $loadBalancer; |
43 | } |
44 | |
45 | /** |
46 | * Return query paramters in array form to get archived elections |
47 | * @return array |
48 | */ |
49 | public function getQueryInfo() { |
50 | $subquery = $this->loadBalancer->getConnection( ILoadBalancer::DB_REPLICA )->buildSelectSubquery( |
51 | 'securepoll_properties', |
52 | 'pr_entity', |
53 | [ 'pr_key' => 'is-archived' ], |
54 | __METHOD__ |
55 | ); |
56 | |
57 | return [ |
58 | 'tables' => 'securepoll_elections', |
59 | 'fields' => '*', |
60 | 'conds' => [ |
61 | 'el_entity IN ' . $subquery, |
62 | ], |
63 | ]; |
64 | } |
65 | |
66 | /** |
67 | * @return string HTML |
68 | */ |
69 | public function getLinks() { |
70 | $id = $this->mCurrentRow->el_entity; |
71 | |
72 | $s = ''; |
73 | $sep = $this->msg( 'pipe-separator' )->escaped(); |
74 | foreach ( $this->subpages as $subpage => $props ) { |
75 | // Message keys used here: |
76 | // securepoll-subpage-unarchive |
77 | $linkText = $this->msg( "securepoll-subpage-$subpage" )->text(); |
78 | if ( $s !== '' ) { |
79 | $s .= $sep; |
80 | } |
81 | if ( |
82 | ( $this->isAdmin || $props['public'] ) && |
83 | ( !$this->election->isStarted() || |
84 | ( $this->election->isStarted() && $this->election->isFinished() ) || |
85 | $props['visible-after-start'] ) && |
86 | ( !$this->election->isFinished() || $props['visible-after-close'] ) |
87 | ) { |
88 | if ( isset( $props['link'] ) ) { |
89 | $s .= $this->{$props['link']}( $id ); |
90 | } else { |
91 | $title = $this->page->specialPage->getPageTitle( "$subpage/$id" ); |
92 | $s .= $this->linkRenderer->makeKnownLink( $title, $linkText ); |
93 | } |
94 | } else { |
95 | $s .= Html::element( |
96 | 'span', |
97 | [ |
98 | 'class' => 'securepoll-link-disabled', |
99 | ], |
100 | $linkText |
101 | ); |
102 | } |
103 | } |
104 | |
105 | return $s; |
106 | } |
107 | } |