Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
75.00% covered (warning)
75.00%
15 / 20
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
TourLauncher
75.00% covered (warning)
75.00%
15 / 20
33.33% covered (danger)
33.33%
1 / 3
9.00
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 launchTour
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 makeTourLink
86.67% covered (warning)
86.67%
13 / 15
0.00% covered (danger)
0.00%
0 / 1
5.06
1<?php
2
3namespace MediaWiki\CheckUser\GuidedTour;
4
5use ExtensionRegistry;
6use HtmlArmor;
7use MediaWiki\CheckUser\Investigate\SpecialInvestigate;
8use MediaWiki\Extension\GuidedTour\GuidedTourLauncher;
9use MediaWiki\Linker\LinkRenderer;
10use MediaWiki\Linker\LinkTarget;
11
12class TourLauncher {
13    private ExtensionRegistry $extensionRegistry;
14    private LinkRenderer $linkRenderer;
15
16    /**
17     * @param ExtensionRegistry $extensionRegistry
18     * @param LinkRenderer $linkRenderer
19     */
20    public function __construct(
21        ExtensionRegistry $extensionRegistry,
22        LinkRenderer $linkRenderer
23    ) {
24        $this->extensionRegistry = $extensionRegistry;
25        $this->linkRenderer = $linkRenderer;
26    }
27
28    /**
29     * Launch a Guided Tour if the extension is loaded.
30     *
31     * @see GuidedTourLauncher::launchTour
32     *
33     * @param string $tourName
34     * @param string $step
35     */
36    public function launchTour( string $tourName, string $step ): void {
37        if ( !$this->extensionRegistry->isLoaded( 'GuidedTour' ) ) {
38            return;
39        }
40
41        GuidedTourLauncher::launchTour( $tourName, $step );
42    }
43
44    /**
45     * Creates a link which can be used to reset the visited status of a tour and
46     * cause the next page load to show the tour.
47     *
48     * @param string $tourName One of SpecialInvestigate::TOUR_*
49     * @param LinkTarget $target
50     * @param string|HtmlArmor|null $text
51     * @param array $extraAttribs
52     * @param array $query
53     * @return string HTML
54     */
55    public function makeTourLink(
56        string $tourName,
57        LinkTarget $target,
58        $text = null,
59        array $extraAttribs = [],
60        array $query = []
61    ): string {
62        if ( !$this->extensionRegistry->isLoaded( 'GuidedTour' ) ) {
63            return '';
64        }
65
66        if ( !isset( $extraAttribs['class'] ) ) {
67            $extraAttribs['class'] = [];
68        } elseif ( !is_array( $extraAttribs['class'] ) ) {
69            $extraAttribs['class'] = [ $extraAttribs['class'] ];
70        }
71        $extraAttribs['class'][] = 'ext-checkuser-investigate-reset-guided-tour';
72        if ( $tourName === SpecialInvestigate::TOUR_INVESTIGATE_FORM ) {
73            $extraAttribs['class'][] = 'ext-checkuser-investigate-reset-form-guided-tour';
74        }
75
76        return $this->linkRenderer->makeLink(
77            $target,
78            $text,
79            $extraAttribs,
80            $query
81        );
82    }
83}