Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 58
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
FrontendModulesFactory
0.00% covered (danger)
0.00%
0 / 58
0.00% covered (danger)
0.00%
0 / 6
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
2
 newEventDetailsModule
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 newEventDetailsParticipantsModule
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
2
 newEmailParticipantsModule
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 newResponseStatisticsModule
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 newClickwrapFormModule
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare( strict_types=1 );
4
5namespace MediaWiki\Extension\CampaignEvents\FrontendModules;
6
7use Language;
8use MediaWiki\Extension\CampaignEvents\Event\ExistingEventRegistration;
9use MediaWiki\Extension\CampaignEvents\Hooks\CampaignEventsHookRunner;
10use MediaWiki\Extension\CampaignEvents\Messaging\CampaignsUserMailer;
11use MediaWiki\Extension\CampaignEvents\MWEntity\CampaignsCentralUserLookup;
12use MediaWiki\Extension\CampaignEvents\MWEntity\PageURLResolver;
13use MediaWiki\Extension\CampaignEvents\MWEntity\UserLinker;
14use MediaWiki\Extension\CampaignEvents\Organizers\OrganizersStore;
15use MediaWiki\Extension\CampaignEvents\Participants\ParticipantsStore;
16use MediaWiki\Extension\CampaignEvents\Permissions\PermissionChecker;
17use MediaWiki\Extension\CampaignEvents\Questions\EventAggregatedAnswersStore;
18use MediaWiki\Extension\CampaignEvents\Questions\EventQuestionsRegistry;
19use MediaWiki\Extension\CampaignEvents\Questions\ParticipantAnswersStore;
20use MediaWiki\Extension\CampaignEvents\Time\EventTimeFormatter;
21use MediaWiki\Extension\CampaignEvents\TrackingTool\TrackingToolRegistry;
22use MediaWiki\User\UserFactory;
23use Wikimedia\Message\IMessageFormatterFactory;
24
25class FrontendModulesFactory {
26    public const SERVICE_NAME = 'CampaignEventsFrontendModulesFactory';
27
28    private IMessageFormatterFactory $messageFormatterFactory;
29    private OrganizersStore $organizersStore;
30    private ParticipantsStore $participantsStore;
31    private PageURLResolver $pageURLResolver;
32    private UserLinker $userLinker;
33    private CampaignsCentralUserLookup $centralUserLookup;
34    private PermissionChecker $permissionChecker;
35    private EventTimeFormatter $eventTimeFormatter;
36    private UserFactory $userFactory;
37    private TrackingToolRegistry $trackingToolRegistry;
38    private CampaignsUserMailer $userMailer;
39    private ParticipantAnswersStore $answersStore;
40    private EventAggregatedAnswersStore $aggregatedAnswersStore;
41    private EventQuestionsRegistry $questionsRegistry;
42    private CampaignEventsHookRunner $hookRunner;
43
44    /**
45     * @param IMessageFormatterFactory $messageFormatterFactory
46     * @param OrganizersStore $organizersStore
47     * @param ParticipantsStore $participantsStore
48     * @param PageURLResolver $pageURLResolver
49     * @param UserLinker $userLinker
50     * @param CampaignsCentralUserLookup $centralUserLookup
51     * @param PermissionChecker $permissionChecker
52     * @param EventTimeFormatter $eventTimeFormatter
53     * @param UserFactory $userFactory
54     * @param TrackingToolRegistry $trackingToolRegistry
55     * @param CampaignsUserMailer $userMailer
56     * @param ParticipantAnswersStore $answersStore
57     * @param EventAggregatedAnswersStore $aggregatedAnswersStore
58     * @param EventQuestionsRegistry $questionsRegistry
59     * @param CampaignEventsHookRunner $hookRunner
60     */
61    public function __construct(
62        IMessageFormatterFactory $messageFormatterFactory,
63        OrganizersStore $organizersStore,
64        ParticipantsStore $participantsStore,
65        PageURLResolver $pageURLResolver,
66        UserLinker $userLinker,
67        CampaignsCentralUserLookup $centralUserLookup,
68        PermissionChecker $permissionChecker,
69        EventTimeFormatter $eventTimeFormatter,
70        UserFactory $userFactory,
71        TrackingToolRegistry $trackingToolRegistry,
72        CampaignsUserMailer $userMailer,
73        ParticipantAnswersStore $answersStore,
74        EventAggregatedAnswersStore $aggregatedAnswersStore,
75        EventQuestionsRegistry $questionsRegistry,
76        CampaignEventsHookRunner $hookRunner
77    ) {
78        $this->messageFormatterFactory = $messageFormatterFactory;
79        $this->organizersStore = $organizersStore;
80        $this->participantsStore = $participantsStore;
81        $this->pageURLResolver = $pageURLResolver;
82        $this->userLinker = $userLinker;
83        $this->centralUserLookup = $centralUserLookup;
84        $this->permissionChecker = $permissionChecker;
85        $this->eventTimeFormatter = $eventTimeFormatter;
86        $this->userFactory = $userFactory;
87        $this->trackingToolRegistry = $trackingToolRegistry;
88        $this->userMailer = $userMailer;
89        $this->answersStore = $answersStore;
90        $this->aggregatedAnswersStore = $aggregatedAnswersStore;
91        $this->questionsRegistry = $questionsRegistry;
92        $this->hookRunner = $hookRunner;
93    }
94
95    /**
96     * @param ExistingEventRegistration $registration
97     * @param Language $language
98     * @return EventDetailsModule
99     */
100    public function newEventDetailsModule(
101        ExistingEventRegistration $registration,
102        Language $language
103    ): EventDetailsModule {
104        return new EventDetailsModule(
105            $this->messageFormatterFactory,
106            $this->organizersStore,
107            $this->pageURLResolver,
108            $this->userLinker,
109            $this->eventTimeFormatter,
110            $this->trackingToolRegistry,
111            $this->hookRunner,
112            $registration,
113            $language
114        );
115    }
116
117    /**
118     * @param Language $language
119     * @param string $statisticsTabUrl
120     * @return EventDetailsParticipantsModule
121     */
122    public function newEventDetailsParticipantsModule(
123        Language $language,
124        string $statisticsTabUrl
125    ): EventDetailsParticipantsModule {
126        return new EventDetailsParticipantsModule(
127            $this->messageFormatterFactory,
128            $this->userLinker,
129            $this->participantsStore,
130            $this->centralUserLookup,
131            $this->permissionChecker,
132            $this->userFactory,
133            $this->userMailer,
134            $this->questionsRegistry,
135            $language,
136            $statisticsTabUrl
137        );
138    }
139
140    public function newEmailParticipantsModule(): EmailParticipantsModule {
141        return new EmailParticipantsModule(
142            $this->messageFormatterFactory
143        );
144    }
145
146    public function newResponseStatisticsModule(
147        ExistingEventRegistration $event,
148        Language $language
149    ): ResponseStatisticsModule {
150        return new ResponseStatisticsModule(
151            $this->messageFormatterFactory,
152            $this->answersStore,
153            $this->aggregatedAnswersStore,
154            $this->questionsRegistry,
155            $this->participantsStore,
156            $this,
157            $event,
158            $language
159        );
160    }
161
162    /**
163     * @param ExistingEventRegistration $event
164     * @param Language $language
165     * @return ClickwrapFormModule
166     */
167    public function newClickwrapFormModule(
168        ExistingEventRegistration $event,
169        Language $language
170    ): ClickwrapFormModule {
171        return new ClickwrapFormModule(
172            $event,
173            $this->organizersStore,
174            $this->messageFormatterFactory,
175            $language,
176            $this->centralUserLookup
177        );
178    }
179}