Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
98.61% covered (success)
98.61%
71 / 72
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
ReviewHandler
98.61% covered (success)
98.61%
71 / 72
75.00% covered (warning)
75.00%
3 / 4
5
0.00% covered (danger)
0.00%
0 / 1
 run
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
 needsWriteAccess
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getParamSettings
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 getBodyParamSettings
100.00% covered (success)
100.00%
57 / 57
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Extension\FlaggedRevs\Rest;
4
5use FlaggedRevs;
6use MediaWiki\Rest\Response;
7use MediaWiki\Rest\SimpleHandler;
8use RevisionReview;
9use Wikimedia\ParamValidator\ParamValidator;
10
11/**
12 * Handler class for REST API endpoint that updates revision review items
13 */
14class ReviewHandler extends SimpleHandler {
15
16    /**
17     * @param string $target
18     * @return Response
19     */
20    public function run( $target ) {
21        $body = $this->getValidatedBody();
22        $body[ 'target' ] = $target;
23        $result = RevisionReview::doReview( $body );
24        $response = $this->getResponseFactory()->createJson( $result );
25        if ( isset( $result[ 'error-html' ] ) ) {
26            $response->setStatus( 400 );
27        }
28        return $response;
29    }
30
31    /** @inheritDoc */
32    public function needsWriteAccess() {
33        return true;
34    }
35
36    /** @inheritDoc */
37    public function getParamSettings() {
38        return [
39            'target' => [
40                self::PARAM_SOURCE => 'path',
41                ParamValidator::PARAM_TYPE => 'string',
42                ParamValidator::PARAM_REQUIRED => true,
43            ]
44        ];
45    }
46
47    /** @inheritDoc */
48    public function getBodyParamSettings(): array {
49        // NOTE: All parameters are received as strings, because review.js
50        //       takes the values from HTML form elements without understanding
51        //       their types.
52        //       This is not a problem since we pass the request body to
53        //       RevisionReview::doReview(), which is designed to handle submit
54        //       data from an HTML form, which is all strings anyway.
55
56        return [
57            'oldid' => [
58                self::PARAM_SOURCE => 'body',
59                ParamValidator::PARAM_TYPE => 'string',
60                ParamValidator::PARAM_REQUIRED => false,
61            ],
62            'refid' => [
63                self::PARAM_SOURCE => 'body',
64                ParamValidator::PARAM_TYPE => 'string',
65                ParamValidator::PARAM_REQUIRED => false,
66            ],
67            'validatedParams' => [
68                self::PARAM_SOURCE => 'body',
69                ParamValidator::PARAM_TYPE => 'string',
70                ParamValidator::PARAM_REQUIRED => false,
71            ],
72            'templateParams' => [
73                self::PARAM_SOURCE => 'body',
74                ParamValidator::PARAM_TYPE => 'string',
75                ParamValidator::PARAM_REQUIRED => false,
76            ],
77            'wpApprove' => [
78                self::PARAM_SOURCE => 'body',
79                ParamValidator::PARAM_TYPE => 'string',
80                ParamValidator::PARAM_REQUIRED => false,
81            ],
82            'wpUnapprove' => [
83                self::PARAM_SOURCE => 'body',
84                ParamValidator::PARAM_TYPE => 'string',
85                ParamValidator::PARAM_REQUIRED => false,
86            ],
87            'wpReject' => [
88                self::PARAM_SOURCE => 'body',
89                ParamValidator::PARAM_TYPE => 'string',
90                ParamValidator::PARAM_REQUIRED => false,
91            ],
92            'wpReason' => [
93                self::PARAM_SOURCE => 'body',
94                ParamValidator::PARAM_TYPE => 'string',
95                ParamValidator::PARAM_REQUIRED => false,
96            ],
97            'changetime' => [
98                self::PARAM_SOURCE => 'body',
99                ParamValidator::PARAM_TYPE => 'string',
100                ParamValidator::PARAM_REQUIRED => false,
101            ],
102            'wpEditToken' => [
103                self::PARAM_SOURCE => 'body',
104                ParamValidator::PARAM_TYPE => 'string',
105                ParamValidator::PARAM_REQUIRED => true,
106            ],
107            'wp' . FlaggedRevs::getTagName() => [
108                self::PARAM_SOURCE => 'body',
109                ParamValidator::PARAM_TYPE => 'string',
110                ParamValidator::PARAM_REQUIRED => false,
111            ],
112        ];
113    }
114}