Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 46
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 / 46
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 doUpdate
0.00% covered (danger)
0.00%
0 / 44
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3class CdnCacheUpdateBannerLoader implements DeferrableUpdate {
4
5    /**
6     * @var string
7     */
8    private $langCode;
9
10    /**
11     * @var Banner
12     */
13    private $banner;
14
15    /**
16     * Create a DeferrableUpdate to purge CDN content for a given banner and language
17     *
18     * @param string $langCode Language code
19     * @param Banner $banner
20     */
21    public function __construct( $langCode, Banner $banner ) {
22        $this->langCode = $langCode;
23        $this->banner = $banner;
24    }
25
26    /**
27     * Purges the banner loader URls for the language and banner passed to the constructor.
28     */
29    public function doUpdate() {
30        global $wgCentralSelectedBannerDispatcher,
31        $wgCentralSelectedMobileBannerDispatcher;
32
33        $paramPerms = [];
34        $bannerName = $this->banner->getName();
35
36        // Note: URL parameter order must be: title (if used in configured
37        // URLs, for ugly URL format), campaign (omitted for preview),
38        // banner, uselang, debug. See ext.centralNotice.display.js.
39
40        // Include URLs for banner preview (no campaign, users's language)
41        $paramPerms[] = [
42            'banner' => $bannerName,
43            'uselang' => $this->langCode,
44            'debug' => 'true'
45        ];
46
47        $paramPerms[] = [
48            'banner' => $bannerName,
49            'uselang' => $this->langCode,
50            'debug' => 'false'
51        ];
52
53        // Include expected permutations of non-preview URLs
54        $campaignNames = $this->banner->getCampaignNames();
55
56        foreach ( $campaignNames as $campaignName ) {
57            $paramPerms[] = [
58                'campaign' => $campaignName,
59                'banner' => $bannerName,
60                'uselang' => $this->langCode,
61                'debug' => 'true'
62            ];
63
64            $paramPerms[] = [
65                'campaign' => $campaignName,
66                'banner' => $bannerName,
67                'uselang' => $this->langCode,
68                'debug' => 'false'
69            ];
70        }
71
72        // Determine if we should add mobile URLs, too
73        $addMobile = ( ExtensionRegistry::getInstance()->isLoaded( 'MobileFrontend' ) &&
74            ( $wgCentralSelectedBannerDispatcher !==
75                $wgCentralSelectedMobileBannerDispatcher )
76            );
77
78        // Create the full URLs
79        $urlsToPurge = [];
80        foreach ( $paramPerms as $params ) {
81            $urlsToPurge[] = wfAppendQuery(
82                $wgCentralSelectedBannerDispatcher,
83                $params
84            );
85
86            if ( $addMobile ) {
87                $urlsToPurge[] = wfAppendQuery(
88                    $wgCentralSelectedMobileBannerDispatcher,
89                    $params
90                );
91            }
92        }
93
94        ( new CdnCacheUpdate( $urlsToPurge ) )->doUpdate();
95    }
96}