Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 26 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
InputBoxHooks | |
0.00% |
0 / 26 |
|
0.00% |
0 / 5 |
182 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
onParserFirstCallInit | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
onSpecialPageBeforeExecute | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
42 | |||
render | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
onMediaWikiPerformAction | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | /** |
3 | * Hooks for InputBox extension |
4 | * |
5 | * @file |
6 | * @ingroup Extensions |
7 | */ |
8 | |
9 | namespace MediaWiki\Extension\InputBox; |
10 | |
11 | use Article; |
12 | use MediaWiki\Actions\ActionEntryPoint; |
13 | use MediaWiki\Config\Config; |
14 | use MediaWiki\Hook\MediaWikiPerformActionHook; |
15 | use MediaWiki\Hook\ParserFirstCallInitHook; |
16 | use MediaWiki\Output\OutputPage; |
17 | use MediaWiki\Parser\Parser; |
18 | use MediaWiki\Request\WebRequest; |
19 | use MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook; |
20 | use MediaWiki\SpecialPage\SpecialPage; |
21 | use MediaWiki\Title\Title; |
22 | use MediaWiki\User\User; |
23 | |
24 | /** |
25 | * InputBox hooks |
26 | */ |
27 | class InputBoxHooks implements |
28 | ParserFirstCallInitHook, |
29 | SpecialPageBeforeExecuteHook, |
30 | MediaWikiPerformActionHook |
31 | { |
32 | /** @var Config */ |
33 | private $config; |
34 | |
35 | /** |
36 | * @param Config $config |
37 | */ |
38 | public function __construct( |
39 | Config $config |
40 | ) { |
41 | $this->config = $config; |
42 | } |
43 | |
44 | /** |
45 | * Initialization |
46 | * @param Parser $parser |
47 | */ |
48 | public function onParserFirstCallInit( $parser ) { |
49 | // Register the hook with the parser |
50 | $parser->setHook( 'inputbox', [ $this, 'render' ] ); |
51 | } |
52 | |
53 | /** |
54 | * Prepend prefix to wpNewTitle if necessary |
55 | * @param SpecialPage $special |
56 | * @param string $subPage |
57 | */ |
58 | public function onSpecialPageBeforeExecute( $special, $subPage ) { |
59 | $request = $special->getRequest(); |
60 | $prefix = $request->getText( 'prefix', '' ); |
61 | $title = $request->getText( 'wpNewTitle', '' ); |
62 | $search = $request->getText( 'search', '' ); |
63 | $searchfilter = $request->getText( 'searchfilter', '' ); |
64 | if ( $special->getName() === 'Movepage' && $prefix !== '' && $title !== '' ) { |
65 | $request->setVal( 'wpNewTitle', $prefix . $title ); |
66 | $request->unsetVal( 'prefix' ); |
67 | } |
68 | if ( $special->getName() === 'Search' && $searchfilter !== '' ) { |
69 | $request->setVal( 'search', $search . ' ' . $searchfilter ); |
70 | } |
71 | } |
72 | |
73 | /** |
74 | * Render the input box |
75 | * @param string $input |
76 | * @param array $args |
77 | * @param Parser $parser |
78 | * @return string |
79 | */ |
80 | public function render( $input, $args, Parser $parser ) { |
81 | // Create InputBox |
82 | $inputBox = new InputBox( $this->config, $parser ); |
83 | |
84 | // Configure InputBox |
85 | $inputBox->extractOptions( $parser->replaceVariables( $input ) ); |
86 | |
87 | // Return output |
88 | return $inputBox->render(); |
89 | } |
90 | |
91 | /** |
92 | * <inputbox type=create...> sends requests with action=edit, and |
93 | * possibly a &prefix=Foo. So we pick that up here, munge prefix |
94 | * and title together, and redirect back out to the real page |
95 | * @param OutputPage $output |
96 | * @param Article $article |
97 | * @param Title $title |
98 | * @param User $user |
99 | * @param WebRequest $request |
100 | * @param ActionEntryPoint $wiki |
101 | * @return bool |
102 | */ |
103 | public function onMediaWikiPerformAction( |
104 | $output, |
105 | $article, |
106 | $title, |
107 | $user, |
108 | $request, |
109 | $wiki |
110 | ) { |
111 | // In order to check for 'action=edit' in URL parameters, even if another extension overrides |
112 | // the action, we must not use getActionName() here. (T337436) |
113 | if ( $request->getRawVal( 'action' ) !== 'edit' && $request->getRawVal( 'veaction' ) !== 'edit' ) { |
114 | // not our problem |
115 | return true; |
116 | } |
117 | $prefix = $request->getText( 'prefix', '' ); |
118 | if ( $prefix === '' ) { |
119 | // Fine |
120 | return true; |
121 | } |
122 | |
123 | $title = $prefix . $request->getText( 'title', '' ); |
124 | $params = $request->getValues(); |
125 | unset( $params['prefix'] ); |
126 | $params['title'] = $title; |
127 | |
128 | $output->redirect( wfAppendQuery( $output->getConfig()->get( 'Script' ), $params ), '301' ); |
129 | return false; |
130 | } |
131 | } |