Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 28
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ApiCentralNoticeQueryCampaign
0.00% covered (danger)
0.00%
0 / 28
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 1
 execute
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
20
 getAllowedParams
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 getExamplesMessages
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3use MediaWiki\Api\ApiBase;
4use Wikimedia\ParamValidator\ParamValidator;
5
6/** @todo This needs some major cleanup to work more like the rest of the API. */
7class ApiCentralNoticeQueryCampaign extends ApiBase {
8
9    /**
10     * @var string sanitize campaign name
11     * FIXME: the string is apparently unrestricted in Special:CentralNotice
12     */
13    private const CAMPAIGNS_FILTER = '/^[a-zA-Z0-9 _|\-]+$/';
14
15    public function execute() {
16        // Get our language/project/country
17        $params = $this->extractRequestParams();
18
19        if ( !preg_match( self::CAMPAIGNS_FILTER, $params['campaign'] ) ) {
20            return;
21        }
22
23        $result = $this->getResult();
24
25        $campaigns = explode( '|', $params['campaign'] );
26
27        foreach ( $campaigns as $campaign ) {
28            $settings = Campaign::getCampaignSettings( $campaign );
29            if ( $settings ) {
30                $settings['banners'] = json_decode( $settings['banners'] );
31
32                # TODO this should probably be pushed down:
33                $settings['projects'] = explode( ', ', $settings['projects'] );
34                $settings['countries'] = explode( ', ', $settings['countries'] );
35                $settings['regions'] = explode( ', ', $settings['regions'] );
36                $settings['languages'] = explode( ', ', $settings['languages'] );
37
38                $settings['enabled'] = (bool)$settings['enabled'];
39                $settings['preferred'] = (bool)$settings['preferred'];
40                $settings['locked'] = (bool)$settings['locked'];
41                $settings['geo'] = (bool)$settings['geo'];
42            }
43
44            $result->addValue( [ $this->getModuleName() ], $campaign, $settings );
45        }
46    }
47
48    /** @inheritDoc */
49    public function getAllowedParams() {
50        return [
51            'campaign' => [
52                ParamValidator::PARAM_TYPE => 'string',
53                ParamValidator::PARAM_REQUIRED => true,
54            ],
55        ];
56    }
57
58    /**
59     * @inheritDoc
60     */
61    protected function getExamplesMessages() {
62        return [
63            'action=centralnoticequerycampaign&format=json&campaign=Plea_US'
64                => 'apihelp-centralnoticequerycampaign-example-1',
65        ];
66    }
67
68}