Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CheckUserPagerNavigationBuilder
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 2
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 makeLink
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3namespace MediaWiki\CheckUser\CheckUser;
4
5use MediaWiki\CheckUser\CheckUser\Pagers\AbstractCheckUserPager;
6use MediaWiki\CheckUser\Services\TokenQueryManager;
7use MediaWiki\Html\FormOptions;
8use MediaWiki\Html\Html;
9use MediaWiki\Navigation\PagerNavigationBuilder;
10use MediaWiki\Request\WebRequest;
11use MediaWiki\Session\CsrfTokenSet;
12use MediaWiki\User\UserIdentity;
13use MessageLocalizer;
14
15class CheckUserPagerNavigationBuilder extends PagerNavigationBuilder {
16    private TokenQueryManager $tokenQueryManager;
17    private UserIdentity $target;
18    private WebRequest $request;
19    private CsrfTokenSet $csrfTokenSet;
20
21    /** @var FormOptions The submitted form data in a helper class. */
22    private FormOptions $opts;
23
24    /**
25     * @param MessageLocalizer $messageLocalizer
26     * @param TokenQueryManager $tokenQueryManager
27     * @param CsrfTokenSet $csrfTokenSet
28     * @param WebRequest $request
29     * @param FormOptions $opts
30     * @param UserIdentity $target
31     */
32    public function __construct(
33        MessageLocalizer $messageLocalizer,
34        TokenQueryManager $tokenQueryManager,
35        CsrfTokenSet $csrfTokenSet,
36        WebRequest $request,
37        FormOptions $opts,
38        UserIdentity $target
39    ) {
40        parent::__construct( $messageLocalizer );
41        $this->opts = $opts;
42        $this->tokenQueryManager = $tokenQueryManager;
43        $this->target = $target;
44        $this->request = $request;
45        $this->csrfTokenSet = $csrfTokenSet;
46    }
47
48    /** @inheritDoc */
49    protected function makeLink(
50        ?array $query, ?string $class, string $text, ?string $tooltip, ?string $rel = null
51    ): string {
52        if ( $query === null ) {
53            return Html::element(
54                'span',
55                [
56                    'class' => $class
57                ],
58                $text
59            );
60        }
61        $query = array_merge( $this->linkQuery, $query );
62        $opts = $this->opts;
63        $fields = array_filter( AbstractCheckUserPager::TOKEN_MANAGED_FIELDS, static function ( $field ) use ( $opts ) {
64            return $opts->validateName( $field );
65        } );
66        $fieldData = [];
67        foreach ( $fields as $field ) {
68            if ( !in_array( $field, [ 'dir', 'offset', 'limit' ] ) ) {
69                $fieldData[$field] = $this->opts->getValue( $field );
70            } else {
71                // Never persist the dir, offset and limit
72                // as the pagination links are responsible
73                // for setting or not setting them.
74                $fieldData[$field] = null;
75            }
76        }
77
78        $fieldData['user'] = $this->target->getName();
79        if ( $query ) {
80            foreach ( $query as $queryItem => $queryValue ) {
81                $fieldData[$queryItem] = $queryValue;
82            }
83        }
84        $formFields = [ Html::hidden(
85            'wpEditToken',
86            $this->csrfTokenSet->getToken(),
87            [ 'id' => 'wpEditToken' ]
88        ) ];
89        $formFields[] = Html::hidden(
90            'token',
91            $this->tokenQueryManager->updateToken( $this->request, $fieldData )
92        );
93        $formFields[] = Html::submitButton(
94            $text,
95            [
96                'class' => $class . ' mw-checkuser-paging-links'
97            ]
98        );
99        return Html::rawElement(
100            'form',
101            [
102                'method' => 'post',
103                'class' => 'mw-checkuser-paging-links-form',
104                'rel' => $rel,
105                'title' => $tooltip
106            ],
107            implode( '', $formFields )
108        );
109    }
110}