Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CdnCacheUpdateBannerLoader
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 doUpdate
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3use MediaWiki\Deferred\CdnCacheUpdate;
4use MediaWiki\Deferred\DeferrableUpdate;
5
6class CdnCacheUpdateBannerLoader implements DeferrableUpdate {
7
8    /**
9     * Create a DeferrableUpdate to purge CDN content for a given banner and language
10     */
11    public function __construct(
12        private readonly string $langCode,
13        private readonly Banner $banner,
14    ) {
15    }
16
17    /**
18     * Purges the banner loader URls for the language and banner passed to the constructor.
19     */
20    public function doUpdate() {
21        global $wgCentralSelectedBannerDispatcher;
22
23        $paramPerms = [];
24        $bannerName = $this->banner->getName();
25
26        // Note: URL parameter order must be: title (if used in configured
27        // URLs, for ugly URL format), campaign (omitted for preview),
28        // banner, uselang, debug. See ext.centralNotice.display.js.
29
30        // Include URLs for banner preview (no campaign, users's language)
31        $paramPerms[] = [
32            'banner' => $bannerName,
33            'uselang' => $this->langCode,
34            'debug' => 'true'
35        ];
36
37        $paramPerms[] = [
38            'banner' => $bannerName,
39            'uselang' => $this->langCode,
40            'debug' => 'false'
41        ];
42
43        // Include expected permutations of non-preview URLs
44        $campaignNames = $this->banner->getCampaignNames();
45
46        foreach ( $campaignNames as $campaignName ) {
47            $paramPerms[] = [
48                'campaign' => $campaignName,
49                'banner' => $bannerName,
50                'uselang' => $this->langCode,
51                'debug' => 'true'
52            ];
53
54            $paramPerms[] = [
55                'campaign' => $campaignName,
56                'banner' => $bannerName,
57                'uselang' => $this->langCode,
58                'debug' => 'false'
59            ];
60        }
61
62        // Create the full URLs
63        $urlsToPurge = [];
64        foreach ( $paramPerms as $params ) {
65            $urlsToPurge[] = wfAppendQuery(
66                $wgCentralSelectedBannerDispatcher,
67                $params
68            );
69        }
70
71        ( new CdnCacheUpdate( $urlsToPurge ) )->doUpdate();
72    }
73}