Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 57 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
SpecialEditEventRegistration | |
0.00% |
0 / 57 |
|
0.00% |
0 / 5 |
132 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
2 | |||
getFormMessages | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
execute | |
0.00% |
0 / 36 |
|
0.00% |
0 / 1 |
56 | |||
getValidationFlags | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getShowAlways | |
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 MediaWiki\DAO\WikiAwareEntity; |
8 | use MediaWiki\Extension\CampaignEvents\Event\EditEventCommand; |
9 | use MediaWiki\Extension\CampaignEvents\Event\EventFactory; |
10 | use MediaWiki\Extension\CampaignEvents\Event\Store\EventNotFoundException; |
11 | use MediaWiki\Extension\CampaignEvents\Event\Store\IEventLookup; |
12 | use MediaWiki\Extension\CampaignEvents\Hooks\CampaignEventsHookRunner; |
13 | use MediaWiki\Extension\CampaignEvents\MWEntity\CampaignsCentralUserLookup; |
14 | use MediaWiki\Extension\CampaignEvents\MWEntity\MWAuthorityProxy; |
15 | use MediaWiki\Extension\CampaignEvents\Organizers\OrganizersStore; |
16 | use MediaWiki\Extension\CampaignEvents\Permissions\PermissionChecker; |
17 | use MediaWiki\Extension\CampaignEvents\PolicyMessagesLookup; |
18 | use MediaWiki\Extension\CampaignEvents\Questions\EventQuestionsRegistry; |
19 | use MediaWiki\Extension\CampaignEvents\TrackingTool\TrackingToolRegistry; |
20 | use MediaWiki\WikiMap\WikiMap; |
21 | use OOUI\HtmlSnippet; |
22 | use OOUI\MessageWidget; |
23 | |
24 | class SpecialEditEventRegistration extends AbstractEventRegistrationSpecialPage { |
25 | public const PAGE_NAME = 'EditEventRegistration'; |
26 | |
27 | /** |
28 | * @param IEventLookup $eventLookup |
29 | * @param EventFactory $eventFactory |
30 | * @param EditEventCommand $editEventCommand |
31 | * @param PermissionChecker $permissionChecker |
32 | * @param PolicyMessagesLookup $policyMessagesLookup |
33 | * @param OrganizersStore $organizersStore |
34 | * @param CampaignsCentralUserLookup $centralUserLookup |
35 | * @param TrackingToolRegistry $trackingToolRegistry |
36 | * @param EventQuestionsRegistry $eventQuestionsRegistry |
37 | * @param CampaignEventsHookRunner $hookRunner |
38 | */ |
39 | public function __construct( |
40 | IEventLookup $eventLookup, |
41 | EventFactory $eventFactory, |
42 | EditEventCommand $editEventCommand, |
43 | PermissionChecker $permissionChecker, |
44 | PolicyMessagesLookup $policyMessagesLookup, |
45 | OrganizersStore $organizersStore, |
46 | CampaignsCentralUserLookup $centralUserLookup, |
47 | TrackingToolRegistry $trackingToolRegistry, |
48 | EventQuestionsRegistry $eventQuestionsRegistry, |
49 | CampaignEventsHookRunner $hookRunner |
50 | ) { |
51 | parent::__construct( |
52 | self::PAGE_NAME, |
53 | '', |
54 | $eventLookup, |
55 | $eventFactory, |
56 | $editEventCommand, |
57 | $policyMessagesLookup, |
58 | $organizersStore, |
59 | $permissionChecker, |
60 | $centralUserLookup, |
61 | $trackingToolRegistry, |
62 | $eventQuestionsRegistry, |
63 | $hookRunner |
64 | ); |
65 | } |
66 | |
67 | /** |
68 | * @inheritDoc |
69 | */ |
70 | protected function getFormMessages(): array { |
71 | return [ |
72 | 'success' => 'campaignevents-edit-success-msg', |
73 | 'details-section-subtitle' => 'campaignevents-edit-form-details-subtitle', |
74 | 'submit' => 'campaignevents-edit-form-submit', |
75 | ]; |
76 | } |
77 | |
78 | /** |
79 | * @inheritDoc |
80 | */ |
81 | public function execute( $par ): void { |
82 | if ( $par === null ) { |
83 | $this->outputErrorBox( 'campaignevents-edit-no-event-id-provided' ); |
84 | return; |
85 | } |
86 | $this->eventID = (int)$par; |
87 | if ( (string)$this->eventID !== $par ) { |
88 | $this->outputErrorBox( 'campaignevents-edit-invalid-id' ); |
89 | return; |
90 | } |
91 | try { |
92 | $this->event = $this->eventLookup->getEventByID( $this->eventID ); |
93 | } catch ( EventNotFoundException $_ ) { |
94 | $this->outputErrorBox( 'campaignevents-edit-event-notfound' ); |
95 | return; |
96 | } |
97 | |
98 | $mwAuthority = new MWAuthorityProxy( $this->getAuthority() ); |
99 | if ( !$this->permissionChecker->userCanEditRegistration( $mwAuthority, $this->eventID ) ) { |
100 | $this->outputErrorBox( 'campaignevents-edit-not-allowed-registration' ); |
101 | return; |
102 | } |
103 | |
104 | if ( $this->event->getDeletionTimestamp() !== null ) { |
105 | $this->outputErrorBox( 'campaignevents-edit-error-deleted' ); |
106 | return; |
107 | } |
108 | |
109 | $eventPage = $this->event->getPage(); |
110 | $wikiID = $eventPage->getWikiId(); |
111 | if ( $wikiID !== WikiAwareEntity::LOCAL ) { |
112 | $foreignEditURL = WikiMap::getForeignURL( $wikiID, 'Special:' . self::PAGE_NAME . "/{$this->eventID}" ); |
113 | |
114 | $this->setHeaders(); |
115 | $this->getOutput()->enableOOUI(); |
116 | |
117 | $messageWidget = new MessageWidget( [ |
118 | 'type' => 'notice', |
119 | 'label' => new HtmlSnippet( |
120 | $this->msg( 'campaignevents-edit-page-nonlocal' ) |
121 | ->params( [ |
122 | $foreignEditURL, WikiMap::getWikiName( $wikiID ) |
123 | ] )->parse() |
124 | ) |
125 | ] ); |
126 | |
127 | $this->getOutput()->addHTML( $messageWidget ); |
128 | return; |
129 | } |
130 | parent::execute( $par ); |
131 | } |
132 | |
133 | /** |
134 | * @inheritDoc |
135 | */ |
136 | protected function getValidationFlags(): int { |
137 | return EventFactory::VALIDATE_SKIP_DATES_PAST; |
138 | } |
139 | |
140 | /** |
141 | * @inheritDoc |
142 | */ |
143 | protected function getShowAlways(): bool { |
144 | return true; |
145 | } |
146 | } |