Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 53 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
CheckUserPagerNavigationBuilder | |
0.00% |
0 / 53 |
|
0.00% |
0 / 2 |
56 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
2 | |||
makeLink | |
0.00% |
0 / 47 |
|
0.00% |
0 / 1 |
42 |
1 | <?php |
2 | |
3 | namespace MediaWiki\CheckUser\CheckUser; |
4 | |
5 | use MediaWiki\CheckUser\CheckUser\Pagers\AbstractCheckUserPager; |
6 | use MediaWiki\CheckUser\Services\TokenQueryManager; |
7 | use MediaWiki\Html\FormOptions; |
8 | use MediaWiki\Html\Html; |
9 | use MediaWiki\Navigation\PagerNavigationBuilder; |
10 | use MediaWiki\Request\WebRequest; |
11 | use MediaWiki\Session\CsrfTokenSet; |
12 | use MediaWiki\User\UserIdentity; |
13 | use MessageLocalizer; |
14 | |
15 | class 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 | } |