Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
TemplatePager
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 6
132
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
 getQueryInfo
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
12
 getIndexField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 formatRow
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
6
 getStartBody
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
6
 getEndBody
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3use MediaWiki\Html\Html;
4
5/**
6 * Provides pagination functionality for viewing banner lists in the CentralNotice admin interface.
7 *
8 * @deprecated 2.3 -- We're moving to an HTML form model and this is no longer used directly.
9 * We still need to move the Campaign manager to HTMLForm though and so this still exists for
10 * that part of CN.
11 */
12class TemplatePager extends ReverseChronologicalPager {
13    /** @var string */
14    public $onRemoveChange;
15    /** @var Title */
16    public $viewPage;
17    /** @var SpecialPage */
18    public $special;
19    /** @var bool */
20    public $editable;
21    /** @var string */
22    public $filter;
23
24    public function __construct( $special, $filter = '' ) {
25        $this->special = $special;
26        $this->editable = $special->editable;
27        $this->filter = $filter;
28        parent::__construct();
29
30        // Override paging defaults
31        [ $this->mLimit, /* $offset */ ] = $this->mRequest->getLimitOffsetForUser(
32            $this->getUser(),
33            20,
34            ''
35        );
36        $this->mLimitsShown = [ 20, 50, 100 ];
37
38        $msg = Html::encodeJsVar( $this->msg( 'centralnotice-confirm-delete' )->text() );
39        $this->onRemoveChange = "if( this.checked ) { this.checked = confirm( $msg ) }";
40        $this->viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' );
41    }
42
43    /**
44     * Set the database query to retrieve all the banners in the database
45     *
46     * @return array of query settings
47     */
48    public function getQueryInfo() {
49        $dbr = CNDatabase::getDb();
50
51        // When the filter comes in it is space delimited, so break that...
52        $likeArray = preg_split( '/\s+/', $this->filter );
53
54        // ...and then insert all the wildcards betwean search terms
55        if ( !$likeArray ) {
56            $likeArray = $dbr->anyString();
57        } else {
58            $anyStringToken = $dbr->anyString();
59            $tempArray = [ $anyStringToken ];
60            foreach ( $likeArray as $likePart ) {
61                $tempArray[] = $likePart;
62                $tempArray[] = $anyStringToken;
63            }
64            $likeArray = $tempArray;
65        }
66
67        return [
68            'tables' => [ 'templates' => 'cn_templates' ],
69            'fields' => [ 'templates.tmp_name', 'templates.tmp_id' ],
70            'conds' => [ 'templates.tmp_name' . $dbr->buildLike( $likeArray ) ],
71        ];
72    }
73
74    /**
75     * Sort the banner list by tmp_id (generally equals reverse chronological)
76     *
77     * @return string
78     */
79    public function getIndexField() {
80        return 'templates.tmp_id';
81    }
82
83    /**
84     * Generate the content of each table row (1 row = 1 banner)
85     *
86     * @param stdClass $row database row
87     *
88     * @return string HTML
89     */
90    public function formatRow( $row ) {
91        // Begin banner row
92        $htmlOut = Html::openElement( 'tr' );
93
94        if ( $this->editable ) {
95            // Remove box
96            $htmlOut .= Html::rawElement( 'td', [ 'valign' => 'top' ],
97                Xml::check( 'removeTemplates[]', false,
98                    [
99                        'value'    => $row->tmp_name,
100                        'onchange' => $this->onRemoveChange
101                    ]
102                )
103            );
104        }
105
106        // Render banner row.
107        $htmlOut .= Html::rawElement( 'td', [ 'valign' => 'top' ],
108            BannerRenderer::linkToBanner( $row->tmp_name )
109        );
110
111        // End banner row
112        $htmlOut .= Html::closeElement( 'tr' );
113
114        return $htmlOut;
115    }
116
117    /**
118     * Specify table headers
119     *
120     * @return string HTML
121     */
122    public function getStartBody() {
123        $htmlOut = '';
124        $htmlOut .= Html::openElement( 'table', [ 'cellpadding' => 9 ] );
125        $htmlOut .= Html::openElement( 'tr' );
126        if ( $this->editable ) {
127            $htmlOut .= Xml::element( 'th', [ 'align' => 'left', 'width' => '5%' ],
128                $this->msg( 'centralnotice-remove' )->text()
129            );
130        }
131        $htmlOut .= Xml::element( 'th', [ 'align' => 'left' ],
132            $this->msg( 'centralnotice-templates' )->text()
133        );
134        $htmlOut .= Html::closeElement( 'tr' );
135        return $htmlOut;
136    }
137
138    /**
139     * Close table and add Submit button
140     *
141     * @return string HTML
142     */
143    public function getEndBody() {
144        $htmlOut = '';
145        $htmlOut .= Html::closeElement( 'table' );
146        if ( $this->editable ) {
147            $htmlOut .= Html::hidden( 'authtoken', $this->getUser()->getEditToken() );
148            $htmlOut .= Html::rawElement( 'div',
149                [ 'class' => 'cn-buttons' ],
150                Xml::submitButton( $this->msg( 'centralnotice-modify' )->text() )
151            );
152        }
153        return $htmlOut;
154    }
155}