This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | declare( strict_types = 1 ); |
||
4 | |||
5 | namespace Maps; |
||
6 | |||
7 | use AlItem; |
||
8 | use ALTree; |
||
9 | use Maps\GeoJsonPages\GeoJsonNewPageUi; |
||
10 | use Maps\Presentation\OutputFacade; |
||
11 | use MediaWiki\MediaWikiServices; |
||
12 | use SkinTemplate; |
||
13 | use SMWPrintRequest; |
||
14 | |||
15 | /** |
||
16 | * Static class for hooks handled by the Maps extension. |
||
17 | * |
||
18 | * @since 0.7 |
||
19 | * |
||
20 | * @licence GNU GPL v2+ |
||
21 | * @author Jeroen De Dauw < [email protected] > |
||
22 | */ |
||
23 | final class MapsHooks { |
||
24 | |||
25 | /** |
||
26 | * Adds a link to Admin Links page. |
||
27 | * |
||
28 | * @since 0.7 |
||
29 | * |
||
30 | * @param ALTree $admin_links_tree |
||
31 | * |
||
32 | * @return boolean |
||
33 | */ |
||
34 | public static function addToAdminLinks( ALTree &$admin_links_tree ) { |
||
35 | $displaying_data_section = $admin_links_tree->getSection( |
||
36 | wfMessage( 'smw_adminlinks_displayingdata' )->text() |
||
37 | ); |
||
38 | |||
39 | // Escape if SMW hasn't added links. |
||
40 | if ( is_null( $displaying_data_section ) ) { |
||
41 | return true; |
||
42 | } |
||
43 | |||
44 | $smw_docu_row = $displaying_data_section->getRow( 'smw' ); |
||
45 | |||
46 | $maps_docu_label = wfMessage( 'adminlinks_documentation', 'Maps' )->text(); |
||
47 | $smw_docu_row->addItem( |
||
48 | AlItem::newFromExternalLink( 'https://www.semantic-mediawiki.org/wiki/Extension:Maps', $maps_docu_label ) |
||
49 | ); |
||
50 | |||
51 | return true; |
||
52 | } |
||
53 | |||
54 | /** |
||
55 | * Adds global JavaScript variables. |
||
56 | * |
||
57 | * @since 1.0 |
||
58 | * @see http://www.mediawiki.org/wiki/Manual:Hooks/MakeGlobalVariablesScript |
||
59 | * |
||
60 | * @param array &$vars Variables to be added into the output |
||
61 | * |
||
62 | * @return boolean true in all cases |
||
63 | */ |
||
64 | public static function onMakeGlobalVariablesScript( array &$vars ) { |
||
65 | $vars['egMapsScriptPath'] = $GLOBALS['wgScriptPath'] . '/extensions/Maps/'; // TODO: wgExtensionDirectory? |
||
66 | $vars['egMapsDebugJS'] = $GLOBALS['egMapsDebugJS']; |
||
67 | $vars['egMapsAvailableServices'] = $GLOBALS['egMapsAvailableServices']; |
||
68 | $vars['egMapsLeafletLayersApiKeys'] = $GLOBALS['egMapsLeafletLayersApiKeys']; |
||
69 | |||
70 | $vars += $GLOBALS['egMapsGlobalJSVars']; |
||
71 | |||
72 | return true; |
||
73 | } |
||
74 | |||
75 | public static function onSkinTemplateNavigation( SkinTemplate $skinTemplate, array &$links ) { |
||
76 | if ( $skinTemplate->getTitle() === null ) { |
||
77 | return true; |
||
78 | } |
||
79 | |||
80 | if ( $skinTemplate->getTitle()->getNamespace() === NS_GEO_JSON ) { |
||
81 | if ( array_key_exists( 'edit', $links['views'] ) ) { |
||
82 | $links['views']['edit']['text'] = wfMessage( |
||
83 | $skinTemplate->getTitle()->exists() ? 'maps-geo-json-edit-source': 'maps-geo-json-create-source' |
||
84 | ); |
||
85 | } |
||
86 | } |
||
87 | |||
88 | return true; |
||
89 | } |
||
90 | |||
91 | public static function onBeforeDisplayNoArticleText( \Article $article ) { |
||
92 | return !self::shouldShowGeoJsonCreatePageUi( $article ); |
||
93 | } |
||
94 | |||
95 | public static function onShowMissingArticle( \Article $article ) { |
||
96 | if ( self::shouldShowGeoJsonCreatePageUi( $article ) ) { |
||
97 | $ui = new GeoJsonNewPageUi( OutputFacade::newFromOutputPage( $article->getContext()->getOutput() ) ); |
||
98 | $ui->addToOutput(); |
||
99 | } |
||
100 | |||
101 | return true; |
||
102 | } |
||
103 | |||
104 | private static function shouldShowGeoJsonCreatePageUi( \Article $article ): bool { |
||
105 | return $article->getTitle()->getNamespace() === NS_GEO_JSON |
||
106 | && MediaWikiServices::getInstance()->getPermissionManager()->userHasRight( $article->getContext()->getUser(), 'createpage' ); |
||
107 | } |
||
108 | |||
109 | public static function onRegisterTags( array &$tags ) { |
||
110 | $tags[] = 'maps-visual-edit'; |
||
111 | return true; |
||
112 | } |
||
113 | |||
114 | public static function onChangeTagsAllowedAdd( array &$allowedTags, array $tags, \User $user = null ) { |
||
0 ignored issues
–
show
|
|||
115 | $allowedTags[] = 'maps-visual-edit'; |
||
116 | } |
||
117 | |||
118 | public static function onResourceLoaderTestModules( array &$modules, $resourceLoader ) { |
||
0 ignored issues
–
show
|
|||
119 | $modules['qunit']['ext.maps.test'] = [ |
||
120 | 'scripts' => [ |
||
121 | 'tests/js/leaflet/GeoJsonTest.js', |
||
122 | ], |
||
123 | 'dependencies' => [ |
||
124 | 'ext.maps.leaflet.geojson', |
||
125 | ], |
||
126 | 'localBasePath' => __DIR__ . '/..', |
||
127 | 'remoteExtPath' => 'Maps' |
||
128 | ]; |
||
129 | } |
||
130 | |||
131 | /** |
||
132 | * Set the default format to 'map' when the requested properties are |
||
133 | * of type geographic coordinates. |
||
134 | * |
||
135 | * TODO: have a setting to turn this off and have it off by default for #show |
||
136 | * |
||
137 | * @since 1.0 |
||
138 | * |
||
139 | * @param $format Mixed: The format (string), or false when not set yet |
||
140 | * @param SMWPrintRequest[] $printRequests The print requests made |
||
141 | * |
||
142 | * @return boolean |
||
143 | */ |
||
144 | public static function addGeoCoordsDefaultFormat( &$format, array $printRequests ) { |
||
145 | // Only set the format when not set yet. This allows other extensions to override the Maps behavior. |
||
146 | if ( $format === false ) { |
||
147 | // Only apply when there is more then one print request. |
||
148 | // This way requests comming from #show are ignored. |
||
149 | if ( count( $printRequests ) > 1 ) { |
||
150 | $allValid = true; |
||
151 | $hasCoords = false; |
||
152 | |||
153 | // Loop through the print requests to determine their types. |
||
154 | foreach ( $printRequests as $printRequest ) { |
||
155 | // Skip the first request, as it's the object. |
||
156 | if ( $printRequest->getMode() == SMWPrintRequest::PRINT_THIS ) { |
||
157 | continue; |
||
158 | } |
||
159 | |||
160 | $typeId = $printRequest->getTypeID(); |
||
161 | |||
162 | if ( $typeId == '_geo' ) { |
||
163 | $hasCoords = true; |
||
164 | } else { |
||
165 | $allValid = false; |
||
166 | break; |
||
167 | } |
||
168 | } |
||
169 | |||
170 | // If they are all coordinates, set the result format to 'map'. |
||
171 | if ( $allValid && $hasCoords ) { |
||
172 | $format = 'map'; |
||
173 | } |
||
174 | } |
||
175 | |||
176 | } |
||
177 | |||
178 | return true; |
||
179 | } |
||
180 | |||
181 | public static function addSmwSettings( array &$settings ) { |
||
0 ignored issues
–
show
|
|||
182 | // TODO: uncomment when it is safe for the semantic integration to be enabled by default |
||
183 | // $settings['smwgNamespacesWithSemanticLinks'][NS_GEO_JSON] = true; |
||
184 | return true; |
||
185 | } |
||
186 | |||
187 | } |
||
188 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.