Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 79 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 1 |
SpecialAllEvents | |
0.00% |
0 / 79 |
|
0.00% |
0 / 4 |
42 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
execute | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
showFormAndEvents | |
0.00% |
0 / 65 |
|
0.00% |
0 / 1 |
12 | |||
getGroupName | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | declare( strict_types=1 ); |
4 | |
5 | namespace MediaWiki\Extension\CampaignEvents\Special; |
6 | |
7 | use HTMLForm; |
8 | use MediaWiki\Extension\CampaignEvents\Event\EventRegistration; |
9 | use MediaWiki\Extension\CampaignEvents\Pager\EventsPagerFactory; |
10 | use MediaWiki\SpecialPage\SpecialPage; |
11 | |
12 | class SpecialAllEvents extends SpecialPage { |
13 | public const PAGE_NAME = 'AllEvents'; |
14 | private EventsPagerFactory $eventsPagerFactory; |
15 | |
16 | /** |
17 | * @param EventsPagerFactory $eventsPagerFactory |
18 | */ |
19 | public function __construct( |
20 | EventsPagerFactory $eventsPagerFactory |
21 | ) { |
22 | parent::__construct( self::PAGE_NAME ); |
23 | $this->eventsPagerFactory = $eventsPagerFactory; |
24 | } |
25 | |
26 | /** |
27 | * @inheritDoc |
28 | */ |
29 | public function execute( $subPage ): void { |
30 | $this->setHeaders(); |
31 | $this->addHelpLink( 'Extension:CampaignEvents' ); |
32 | $this->getOutput()->addModuleStyles( [ |
33 | 'ext.campaignEvents.specialeventslist.styles', |
34 | 'oojs-ui.styles.icons-location', |
35 | 'oojs-ui.styles.icons-interactions', |
36 | 'oojs-ui.styles.icons-user', |
37 | 'oojs-ui.styles.icons-editing-advanced' |
38 | ] ); |
39 | $this->getOutput()->addModules( [ 'ext.campaignEvents.specialeventslist' ] ); |
40 | $this->showFormAndEvents(); |
41 | } |
42 | |
43 | private function showFormAndEvents(): void { |
44 | $request = $this->getRequest(); |
45 | $searchedVal = $request->getVal( 'wpSearch', '' ); |
46 | $meetingType = $request->getIntOrNull( 'wpMeetingType' ); |
47 | $startDate = $request->getVal( 'wpStartDate', date( 'Y-m-d' ) ); |
48 | $startTime = $startDate !== '' ? $startDate . ' 00:00:00' : $startDate; |
49 | $endDate = $request->getVal( 'wpEndDate', '' ); |
50 | $endTime = $endDate !== '' ? $endDate . ' 23:59:59' : $endDate; |
51 | |
52 | $pager = $this->eventsPagerFactory->newListPager( |
53 | $searchedVal, |
54 | $meetingType, |
55 | $startTime, |
56 | $endTime |
57 | ); |
58 | |
59 | $formDescriptor = [ |
60 | 'Search' => [ |
61 | 'type' => 'text', |
62 | 'label-message' => 'campaignevents-allevents-label-search', |
63 | 'default' => $searchedVal, |
64 | 'cssclass' => 'ext-campaignevents-allevents-search-field' |
65 | ], |
66 | 'MeetingType' => [ |
67 | 'type' => 'select', |
68 | 'label-message' => 'campaignevents-allevents-label-meeting-type', |
69 | 'options-messages' => [ |
70 | 'campaignevents-eventslist-location-all-events' => null, |
71 | 'campaignevents-eventslist-location-online' => EventRegistration::MEETING_TYPE_ONLINE, |
72 | 'campaignevents-eventslist-location-in-person' => EventRegistration::MEETING_TYPE_IN_PERSON, |
73 | 'campaignevents-eventslist-location-online-and-in-person' => |
74 | EventRegistration::MEETING_TYPE_ONLINE_AND_IN_PERSON |
75 | ], |
76 | 'default' => $meetingType, |
77 | 'cssclass' => 'ext-campaignevents-allevents-meetingtype-field' |
78 | ], |
79 | 'StartDate' => [ |
80 | 'type' => 'date', |
81 | 'label-message' => 'campaignevents-allevents-label-start-date', |
82 | 'icon' => 'calendar', |
83 | 'cssclass' => 'ext-campaignevents-allevents-calendar-field', |
84 | 'default' => $startDate, |
85 | ], |
86 | 'EndDate' => [ |
87 | 'type' => 'date', |
88 | 'label-message' => 'campaignevents-allevents-label-end-date', |
89 | 'icon' => 'calendar', |
90 | 'cssclass' => 'ext-campaignevents-allevents-calendar-field', |
91 | 'default' => '', |
92 | ], |
93 | 'Limit' => [ |
94 | // NOTE: This has to be called 'limit' because the pager expects that name. |
95 | 'name' => 'limit', |
96 | 'type' => 'select', |
97 | 'label-message' => 'campaignevents-allevents-label-events-per-page', |
98 | 'default' => $pager->getLimit(), |
99 | 'options' => $pager->getLimitSelectList(), |
100 | 'cssclass' => 'ext-campaignevents-allevents-filter-field' |
101 | ], |
102 | ]; |
103 | HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() ) |
104 | ->setWrapperLegendMsg( 'campaignevents-allevents-filter-legend' ) |
105 | ->setSubmitTextMsg( 'campaignevents-allevents-label-submit' ) |
106 | ->setMethod( 'get' ) |
107 | ->setId( 'ext-campaignevents-allevents-form' ) |
108 | ->setSubmitCallback( fn () => true ) |
109 | ->showAlways(); |
110 | $navigation = $pager->getNavigationBar(); |
111 | $this->getOutput()->addHTML( $navigation . $pager->getBody() . $navigation ); |
112 | } |
113 | |
114 | /** |
115 | * @inheritDoc |
116 | */ |
117 | protected function getGroupName(): string { |
118 | return 'campaignevents'; |
119 | } |
120 | } |