Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ArchivedPager
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 3
210
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getQueryInfo
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
 getLinks
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
156
1<?php
2
3namespace MediaWiki\Extension\SecurePoll\Pages;
4
5use MediaWiki\Html\Html;
6use MediaWiki\Linker\LinkRenderer;
7use MediaWiki\Pager\IndexPager;
8use Wikimedia\Rdbms\ILoadBalancer;
9
10/**
11 * Pager for an archived election list. See TablePager documentation.
12 */
13class 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}